unipdf/extractor/extractor.go
2021-04-23 20:28:14 +00:00

790 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 (_cc "bytes";_dd "errors";_af "fmt";_db "github.com/unidoc/unipdf/v3/common";_gb "github.com/unidoc/unipdf/v3/contentstream";_gd "github.com/unidoc/unipdf/v3/core";_bf "github.com/unidoc/unipdf/v3/internal/license";_ad "github.com/unidoc/unipdf/v3/internal/textencoding";
_ae "github.com/unidoc/unipdf/v3/internal/transform";_gf "github.com/unidoc/unipdf/v3/model";_agc "golang.org/x/text/unicode/norm";_ag "golang.org/x/xerrors";_g "image/color";_b "io";_ec "math";_c "regexp";_ed "sort";_e "strings";_bc "unicode";_a "unicode/utf8";
);func (_gefg *textWord )appendMark (_gdddc *textMark ,_gegd _gf .PdfRectangle ){_gefg ._dbgad =append (_gefg ._dbgad ,_gdddc );_gefg .PdfRectangle =_cffe (_gefg .PdfRectangle ,_gdddc .PdfRectangle );if _gdddc ._bbab > _gefg ._ceafb {_gefg ._ceafb =_gdddc ._bbab ;
};_gefg ._fecd =_gegd .Ury -_gefg .PdfRectangle .Lly ;};func (_ggcd compositeCell )split (_abgc ,_gded []float64 )*textTable {_aedba :=len (_abgc )+1;_abgag :=len (_gded )+1;if _cecg {_db .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",_abgag ,_aedba ,_ggcd ,_abgc ,_gded );
_af .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u0070\u0061\u0072\u0061\u0073\u000a",len (_ggcd .paraList ));for _gcacg ,_adfg :=range _ggcd .paraList {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gcacg ,_adfg .String ());};
_af .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u000a",len (_ggcd .lines ()));for _adgg ,_bdcc :=range _ggcd .lines (){_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_adgg ,_bdcc );};};_abgc =_egdcg (_abgc ,_ggcd .Ury ,_ggcd .Lly );
_gded =_egdcg (_gded ,_ggcd .Llx ,_ggcd .Urx );_cfg :=make (map[uint64 ]*textPara ,_abgag *_aedba );_cga :=textTable {_cecgg :_abgag ,_baffe :_aedba ,_bfdd :_cfg };_ccfa :=_ggcd .paraList ;_ed .Slice (_ccfa ,func (_dfbf ,_dca int )bool {_bgba ,_cbcb :=_ccfa [_dfbf ],_ccfa [_dca ];
_adca ,_bggf :=_bgba .Lly ,_cbcb .Lly ;if _adca !=_bggf {return _adca < _bggf ;};return _bgba .Llx < _cbcb .Llx ;});_becag :=make (map[uint64 ]_gf .PdfRectangle ,_abgag *_aedba );for _feae ,_fada :=range _abgc [1:]{_aeccd :=_abgc [_feae ];for _bdefc ,_bfdf :=range _gded [1:]{_fdfe :=_gded [_bdefc ];
_becag [_dddg (_bdefc ,_feae )]=_gf .PdfRectangle {Llx :_fdfe ,Urx :_bfdf ,Lly :_fada ,Ury :_aeccd };};};if _cecg {_db .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");
_af .Printf ("\u0020\u0020\u0020\u0020");for _ceee :=0;_ceee < _abgag ;_ceee ++{_af .Printf ("\u0025\u0033\u0030\u0064\u002c\u0020",_ceee );};_af .Println ();for _afge :=0;_afge < _aedba ;_afge ++{_af .Printf ("\u0020\u0020\u0025\u0032\u0064\u003a",_afge );
for _edbf :=0;_edbf < _abgag ;_edbf ++{_af .Printf ("\u00256\u002e\u0032\u0066\u002c\u0020",_becag [_dddg (_edbf ,_afge )]);};_af .Println ();};};_eddf :=func (_bebc *textLine )(int ,int ){for _cgaa :=0;_cgaa < _aedba ;_cgaa ++{for _fadg :=0;_fadg < _abgag ;
_fadg ++{if _acce (_becag [_dddg (_fadg ,_cgaa )],_bebc .PdfRectangle ){return _fadg ,_cgaa ;};};};return -1,-1;};_bfag :=make (map[uint64 ][]*textLine ,_abgag *_aedba );for _ ,_bebga :=range _ccfa .lines (){_cgcbd ,_baecd :=_eddf (_bebga );if _cgcbd < 0{continue ;
};_bfag [_dddg (_cgcbd ,_baecd )]=append (_bfag [_dddg (_cgcbd ,_baecd )],_bebga );};for _fbdfa :=0;_fbdfa < len (_abgc )-1;_fbdfa ++{_gace :=_abgc [_fbdfa ];_cgfe :=_abgc [_fbdfa +1];for _dgae :=0;_dgae < len (_gded )-1;_dgae ++{_fadb :=_gded [_dgae ];
_gadab :=_gded [_dgae +1];_gdbg :=_gf .PdfRectangle {Llx :_fadb ,Urx :_gadab ,Lly :_cgfe ,Ury :_gace };_cfgc :=_bfag [_dddg (_dgae ,_fbdfa )];if len (_cfgc )==0{continue ;};_ebeg :=_deegg (_gdbg ,_cfgc );_cga .put (_dgae ,_fbdfa ,_ebeg );};};return &_cga ;
};func (_aae *textObject )moveText (_fad ,_dba float64 ){_aae .moveLP (_fad ,_dba )};func (_bgdg rulingList )blocks (_ggbd ,_bacc *ruling )bool {if _ggbd ._bbgb > _bacc ._daed ||_bacc ._bbgb > _ggbd ._daed {return false ;};_gfec :=_ec .Max (_ggbd ._bbgb ,_bacc ._bbgb );
_cgbd :=_ec .Min (_ggbd ._daed ,_bacc ._daed );if _ggbd ._adee > _bacc ._adee {_ggbd ,_bacc =_bacc ,_ggbd ;};for _ ,_ccde :=range _bgdg {if _ggbd ._adee <=_ccde ._adee +_bcac &&_ccde ._adee <=_bacc ._adee +_bcac &&_ccde ._bbgb <=_cgbd &&_gfec <=_ccde ._daed {return true ;
};};return false ;};func _aeg (_abgbe *wordBag ,_cfed int )*textLine {_bccc :=_abgbe .firstWord (_cfed );_bdga :=textLine {PdfRectangle :_bccc .PdfRectangle ,_dfaf :_bccc ._ceafb ,_dbbgg :_bccc ._fecd };_bdga .pullWord (_abgbe ,_bccc ,_cfed );return &_bdga ;
};func (_egbbe rulingList )sortStrict (){_ed .Slice (_egbbe ,func (_adgd ,_eebbf int )bool {_cgcg ,_acde :=_egbbe [_adgd ],_egbbe [_eebbf ];_ceaff ,_aadc :=_cgcg ._ffag ,_acde ._ffag ;if _ceaff !=_aadc {return _ceaff > _aadc ;};_fdbb ,_gbdg :=_cgcg ._adee ,_acde ._adee ;
if !_fbfd (_fdbb -_gbdg ){return _fdbb < _gbdg ;};_fdbb ,_gbdg =_cgcg ._bbgb ,_acde ._bbgb ;if _fdbb !=_gbdg {return _fdbb < _gbdg ;};return _cgcg ._daed < _acde ._daed ;});};func (_fdde *shapesState )devicePoint (_gdaf ,_bedg float64 )_ae .Point {_bad :=_fdde ._bdc .Mult (_fdde ._gdgc );
_gdaf ,_bedg =_bad .Transform (_gdaf ,_bedg );return _ae .NewPoint (_gdaf ,_bedg );};var _ecebg =_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");
// BBox returns the smallest axis-aligned rectangle that encloses all the TextMarks in `ma`.
func (_faea *TextMarkArray )BBox ()(_gf .PdfRectangle ,bool ){var _dbbd _gf .PdfRectangle ;_agcb :=false ;for _ ,_egeg :=range _faea ._ece {if _egeg .Meta ||_cdfe (_egeg .Text ){continue ;};if _agcb {_dbbd =_cffe (_dbbd ,_egeg .BBox );}else {_dbbd =_egeg .BBox ;
_agcb =true ;};};return _dbbd ,_agcb ;};func _aebc (_cfda ,_afdgg _ae .Point )rulingKind {_fccf :=_ec .Abs (_cfda .X -_afdgg .X );_aadd :=_ec .Abs (_cfda .Y -_afdgg .Y );return _bfbc (_fccf ,_aadd ,_bfab );};func _baeb (_afdgc string ,_beeg int )string {if len (_afdgc )< _beeg {return _afdgc ;
};return _afdgc [:_beeg ];};func (_aeecb *ruling )alignsPrimary (_bbabc *ruling )bool {return _aeecb ._ffag ==_bbabc ._ffag &&_ec .Abs (_aeecb ._adee -_bbabc ._adee )< _bcac *0.5;};func _baage (_ffge map[int ]intSet )[]int {_gcabd :=make ([]int ,0,len (_ffge ));
for _gdddd :=range _ffge {_gcabd =append (_gcabd ,_gdddd );};_ed .Ints (_gcabd );return _gcabd ;};func _bdd (_bgd ,_dbbg _gf .PdfRectangle )bool {return _dbbg .Llx <=_bgd .Urx &&_bgd .Llx <=_dbbg .Urx };func (_caba rulingList )asTiling ()gridTiling {if _bgca {_db .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 (_caba ));
};for _ffdcf ,_ecfc :=range _caba [1:]{_cccge :=_caba [_ffdcf ];if _cccge .alignsPrimary (_ecfc )&&_cccge .alignsSec (_ecfc ){_db .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",_ecfc ,_cccge );
};};_caba .sortStrict ();_caba .log ("\u0073n\u0061\u0070\u0070\u0065\u0064");_egdb ,_cagga :=_caba .vertsHorzs ();_aacec :=_egdb .primaries ();_efgbc :=_cagga .primaries ();_bggd :=len (_aacec )-1;_adag :=len (_efgbc )-1;if _bggd ==0||_adag ==0{return gridTiling {};
};_dadd :=_gf .PdfRectangle {Llx :_aacec [0],Urx :_aacec [_bggd ],Lly :_efgbc [0],Ury :_efgbc [_adag ]};if _bgca {_db .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 (_egdb ));
for _gegc ,_cdcg :=range _egdb {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gegc ,_cdcg );};_db .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 (_cagga ));
for _deeb ,_cggbg :=range _cagga {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_deeb ,_cggbg );};_db .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",_bggd ,_adag ,_aacec ,_efgbc );
};_acfec :=make ([]gridTile ,_bggd *_adag );for _acgbd :=_adag -1;_acgbd >=0;_acgbd --{_adcb :=_efgbc [_acgbd ];_abaca :=_efgbc [_acgbd +1];for _acece :=0;_acece < _bggd ;_acece ++{_bacg :=_aacec [_acece ];_egda :=_aacec [_acece +1];_acff :=_egdb .findPrimSec (_bacg ,_adcb );
_eddge :=_egdb .findPrimSec (_egda ,_adcb );_dbdde :=_cagga .findPrimSec (_adcb ,_bacg );_dfcc :=_cagga .findPrimSec (_abaca ,_bacg );_fefedf :=_gf .PdfRectangle {Llx :_bacg ,Urx :_egda ,Lly :_adcb ,Ury :_abaca };_bcgcg :=_cfegf (_fefedf ,_acff ,_eddge ,_dbdde ,_dfcc );
_acfec [_acgbd *_bggd +_acece ]=_bcgcg ;if _bgca {_af .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",_acece ,_acgbd ,_bcgcg .String (),_bcgcg .Width (),_bcgcg .Height ());
};};};if _bgca {_db .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",_dadd );
};_cfff :=make ([]map[float64 ]gridTile ,_adag );for _cdec :=_adag -1;_cdec >=0;_cdec --{if _bgca {_af .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_cdec );};_cfff [_cdec ]=make (map[float64 ]gridTile ,_bggd );for _ebaf :=0;_ebaf < _bggd ;
_ebaf ++{_aacg :=_acfec [_cdec *_bggd +_ebaf ];if _bgca {_af .Printf ("\u0020\u0020\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ebaf ,_aacg );};if !_aacg ._gebef {continue ;};_debb :=_ebaf ;for _deaaa :=_ebaf +1;!_aacg ._gbcae &&_deaaa < _bggd ;_deaaa ++{_facb :=_acfec [_cdec *_bggd +_deaaa ];
_aacg .Urx =_facb .Urx ;_aacg ._abeaf =_aacg ._abeaf ||_facb ._abeaf ;_aacg ._cfgb =_aacg ._cfgb ||_facb ._cfgb ;_aacg ._gbcae =_facb ._gbcae ;if _bgca {_af .Printf ("\u0020 \u0020%\u0034\u0064\u003a\u0020\u0025s\u0020\u2192 \u0025\u0073\u000a",_deaaa ,_facb ,_aacg );
};_debb =_deaaa ;};if _bgca {_af .Printf (" \u0020 \u0025\u0032\u0064\u0020\u002d\u0020\u0025\u0032d\u0020\u2192\u0020\u0025s\n",_ebaf ,_debb ,_aacg );};_ebaf =_debb ;_cfff [_cdec ][_aacg .Llx ]=_aacg ;};};_fgggg :=make (map[float64 ]map[float64 ]gridTile ,_adag );
_bcbga :=make (map[float64 ]map[float64 ]struct{},_adag );for _ffdeb :=_adag -1;_ffdeb >=0;_ffdeb --{_bgga :=_acfec [_ffdeb *_bggd ].Lly ;_fgggg [_bgga ]=make (map[float64 ]gridTile ,_bggd );_bcbga [_bgga ]=make (map[float64 ]struct{},_bggd );};if _bgca {_db .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",_dadd );
};for _becagf :=_adag -1;_becagf >=0;_becagf --{_ebbed :=_acfec [_becagf *_bggd ].Lly ;_cedf :=_cfff [_becagf ];if _bgca {_af .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_becagf );};for _ ,_cbgec :=range _edfd (_cedf ){if _ ,_cbdd :=_bcbga [_ebbed ][_cbgec ];
_cbdd {continue ;};_caadd :=_cedf [_cbgec ];if _bgca {_af .Printf (" \u0020\u0020\u0020\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_caadd .String ());};for _aeac :=_becagf -1;_aeac >=0;_aeac --{if _caadd ._cfgb {break ;};_acea :=_cfff [_aeac ];_afdf ,_fafe :=_acea [_cbgec ];
if !_fafe {break ;};if _afdf .Urx !=_caadd .Urx {break ;};_caadd ._cfgb =_afdf ._cfgb ;_caadd .Lly =_afdf .Lly ;if _bgca {_af .Printf ("\u0020\u0020\u0020\u0020 \u0020\u0020\u0076\u003d\u0025\u0073\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_afdf .String (),_caadd .String ());
};_bcbga [_afdf .Lly ][_afdf .Llx ]=struct{}{};};if _becagf ==0{_caadd ._cfgb =true ;};if _caadd .complete (){_fgggg [_ebbed ][_cbgec ]=_caadd ;};};};_afad :=gridTiling {PdfRectangle :_dadd ,_dadg :_bdeeb (_fgggg ),_ebff :_ggaef (_fgggg ),_ggace :_fgggg };
_afad .log ("\u0043r\u0065\u0061\u0074\u0065\u0064");return _afad ;};type textLine struct{_gf .PdfRectangle ;_dbbgg float64 ;_egcb []*textWord ;_dfaf float64 ;};func (_gbfg *textObject )setTextRise (_eba float64 ){if _gbfg ==nil {return ;};_gbfg ._gfc ._aee =_eba ;
};type gridTiling struct{_gf .PdfRectangle ;_dadg []float64 ;_ebff []float64 ;_ggace map[float64 ]map[float64 ]gridTile ;};func (_ca *imageExtractContext )extractContentStreamImages (_ff string ,_cg *_gf .PdfPageResources )error {_acd :=_gb .NewContentStreamParser (_ff );
_ge ,_fb :=_acd .Parse ();if _fb !=nil {return _fb ;};if _ca ._acb ==nil {_ca ._acb =map[*_gd .PdfObjectStream ]*cachedImage {};};if _ca ._fe ==nil {_ca ._fe =&ImageExtractOptions {};};_aebf :=_gb .NewContentStreamProcessor (*_ge );_aebf .AddHandler (_gb .HandlerConditionEnumAllOperands ,"",_ca .processOperand );
return _aebf .Process (_cg );};func _cgegf (_deea ,_aagd _ae .Point )bool {_aefe :=_ec .Abs (_deea .X -_aagd .X );_acaa :=_ec .Abs (_deea .Y -_aagd .Y );return _daae (_acaa ,_aefe );};func (_aaec *wordBag )scanBand (_gced string ,_cafb *wordBag ,_dcf func (_effb *wordBag ,_eeff *textWord )bool ,_deae ,_gcag ,_geaag float64 ,_dace ,_gebc bool )int {_bfff :=_cafb ._agbd ;
var _bdgf map[int ]map[*textWord ]struct{};if !_dace {_bdgf =_aaec .makeRemovals ();};_bfga :=_bfgae *_bfff ;_ggaaa :=0;for _ ,_eea :=range _aaec .depthBand (_deae -_bfga ,_gcag +_bfga ){if len (_aaec ._gceg [_eea ])==0{continue ;};for _ ,_ebec :=range _aaec ._gceg [_eea ]{if !(_deae -_bfga <=_ebec ._fecd &&_ebec ._fecd <=_gcag +_bfga ){continue ;
};if !_dcf (_cafb ,_ebec ){continue ;};_dbdd :=2.0*_ec .Abs (_ebec ._ceafb -_cafb ._agbd )/(_ebec ._ceafb +_cafb ._agbd );_fcbfd :=_ec .Max (_ebec ._ceafb /_cafb ._agbd ,_cafb ._agbd /_ebec ._ceafb );_cbcg :=_ec .Min (_dbdd ,_fcbfd );if _geaag > 0&&_cbcg > _geaag {continue ;
};if _cafb .blocked (_ebec ){continue ;};if !_dace {_cafb .pullWord (_ebec ,_eea ,_bdgf );};_ggaaa ++;if !_gebc {if _ebec ._fecd < _deae {_deae =_ebec ._fecd ;};if _ebec ._fecd > _gcag {_gcag =_ebec ._fecd ;};};if _dace {break ;};};};if !_dace {_aaec .applyRemovals (_bdgf );
};return _ggaaa ;};func (_eaed paraList )topoOrder ()[]int {if _egge {_db .Log .Info ("\u0074\u006f\u0070\u006f\u004f\u0072\u0064\u0065\u0072\u003a");};_ffde :=len (_eaed );_egcd :=make ([]bool ,_ffde );_ggcc :=make ([]int ,0,_ffde );_cddc :=_eaed .llyOrdering ();
var _fdfc func (_gfcb int );_fdfc =func (_eacf int ){_egcd [_eacf ]=true ;for _egfe :=0;_egfe < _ffde ;_egfe ++{if !_egcd [_egfe ]{if _eaed .readBefore (_cddc ,_eacf ,_egfe ){_fdfc (_egfe );};};};_ggcc =append (_ggcc ,_eacf );};for _fegd :=0;_fegd < _ffde ;
_fegd ++{if !_egcd [_fegd ]{_fdfc (_fegd );};};return _gfdd (_ggcc );};
// Marks returns the TextMark collection for a page. It represents all the text on the page.
func (_eabc PageText )Marks ()*TextMarkArray {return &TextMarkArray {_ece :_eabc ._bcf }};func (_daf *textObject )moveLP (_eefa ,_fgbc float64 ){_daf ._ade .Concat (_ae .NewMatrix (1,0,0,1,_eefa ,_fgbc ));_daf ._abdc =_daf ._ade ;};func (_gccg paraList )tables ()[]TextTable {var _deeg []TextTable ;
if _cecg {_db .Log .Info ("\u0070\u0061\u0072\u0061\u0073\u002e\u0074\u0061\u0062\u006c\u0065\u0073\u003a");};for _ ,_egea :=range _gccg {_cacb :=_egea ._gagb ;if _cacb !=nil &&_cacb .isExportable (){_deeg =append (_deeg ,_cacb .toTextTable ());};};return _deeg ;
};
// String returns a string describing `tm`.
func (_gde TextMark )String ()string {_cgbf :=_gde .BBox ;var _bgc string ;if _gde .Font !=nil {_bgc =_gde .Font .String ();if len (_bgc )> 50{_bgc =_bgc [:50]+"\u002e\u002e\u002e";};};var _bega string ;if _gde .Meta {_bega ="\u0020\u002a\u004d\u002a";
};return _af .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",_gde .Offset ,_gde .Text ,[]rune (_gde .Text ),_cgbf .Llx ,_cgbf .Lly ,_cgbf .Urx ,_cgbf .Ury ,_bgc ,_bega );
};func _gfb (_edf []*textWord ,_eccf float64 ,_aefd ,_ccebg rulingList )*wordBag {_cage :=_bafd (_edf [0],_eccf ,_aefd ,_ccebg );for _ ,_fcfc :=range _edf [1:]{_ddg :=_ggacg (_fcfc ._fecd );_cage ._gceg [_ddg ]=append (_cage ._gceg [_ddg ],_fcfc );_cage .PdfRectangle =_cffe (_cage .PdfRectangle ,_fcfc .PdfRectangle );
};_cage .sort ();return _cage ;};func _cebdc (_fegc float64 )bool {return _ec .Abs (_fegc )< _bcac };type fontEntry struct{_cgdgd *_gf .PdfFont ;_aabf int64 ;};func (_bgg *textObject )showTextAdjusted (_edg *_gd .PdfObjectArray )error {_bacb :=false ;for _ ,_abc :=range _edg .Elements (){switch _abc .(type ){case *_gd .PdfObjectFloat ,*_gd .PdfObjectInteger :_ecd ,_fdb :=_gd .GetNumberAsFloat (_abc );
if _fdb !=nil {_db .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",_abc ,_edg );
return _fdb ;};_gbf ,_dgg :=-_ecd *0.001*_bgg ._gfc ._cbea ,0.0;if _bacb {_dgg ,_gbf =_gbf ,_dgg ;};_ccgc :=_dae (_ae .Point {X :_gbf ,Y :_dgg });_bgg ._abdc .Concat (_ccgc );case *_gd .PdfObjectString :_aagf ,_bfe :=_gd .GetStringBytes (_abc );if !_bfe {_db .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",_abc ,_edg );
return _gd .ErrTypeError ;};_bgg .renderText (_aagf );default:_db .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",_abc ,_edg );
return _gd .ErrTypeError ;};};return nil ;};type lineRuling struct{_fadc rulingKind ;_bgfga markKind ;_g .Color ;_gagbg ,_ggee _ae .Point ;};func (_cceb *shapesState )clearPath (){_cceb ._bcd =nil ;_cceb ._fag =false ;if _abef {_db .Log .Info ("\u0043\u004c\u0045A\u0052\u003a\u0020\u0073\u0073\u003d\u0025\u0073",_cceb );
};};func _cgde (_ddd ,_bbdg _gf .PdfRectangle )(_gf .PdfRectangle ,bool ){if !_eadg (_ddd ,_bbdg ){return _gf .PdfRectangle {},false ;};return _gf .PdfRectangle {Llx :_ec .Max (_ddd .Llx ,_bbdg .Llx ),Urx :_ec .Min (_ddd .Urx ,_bbdg .Urx ),Lly :_ec .Max (_ddd .Lly ,_bbdg .Lly ),Ury :_ec .Min (_ddd .Ury ,_bbdg .Ury )},true ;
};const (_egcc =false ;_dcgd =false ;_badf =false ;_ccea =false ;_abef =false ;_cabg =false ;_bcg =false ;_egge =false ;_effe =false ;_dfbca =_effe &&true ;_gbda =_dfbca &&false ;_bdgc =_effe &&true ;_cecg =false ;_gade =_cecg &&false ;_egbb =_cecg &&true ;
_aacf =false ;_abeb =_aacf &&false ;_ecbd =_aacf &&false ;_bgca =_aacf &&true ;_daeag =_aacf &&false ;_bagbb =_aacf &&false ;);func _fbeg (_abggd []TextMark ,_aedcg *int )[]TextMark {_dfdg :=_abggd [len (_abggd )-1];_dge :=[]rune (_dfdg .Text );if len (_dge )==1{_abggd =_abggd [:len (_abggd )-1];
_gcab :=_abggd [len (_abggd )-1];*_aedcg =_gcab .Offset +len (_gcab .Text );}else {_acag :=_dfec (_dfdg .Text );*_aedcg +=len (_acag )-len (_dfdg .Text );_dfdg .Text =_acag ;};return _abggd ;};func (_aefef *textWord )computeText ()string {_decc :=make ([]string ,len (_aefef ._dbgad ));
for _bbbfc ,_agfge :=range _aefef ._dbgad {_decc [_bbbfc ]=_agfge ._ebce ;};return _e .Join (_decc ,"");};func (_gccb *textObject )setCharSpacing (_ffdc float64 ){if _gccb ==nil {return ;};_gccb ._gfc ._afd =_ffdc ;if _cabg {_db .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",_ffdc ,_gccb ._gfc .String ());
};};func (_gcee compositeCell )parasBBox ()(paraList ,_gf .PdfRectangle ){return _gcee .paraList ,_gcee .PdfRectangle ;};func (_gagf *subpath )close (){if !_fcedg (_gagf ._ecc [0],_gagf .last ()){_gagf .add (_gagf ._ecc [0]);};_gagf ._bcfb =true ;_gagf .removeDuplicates ();
};func (_dce *textLine )bbox ()_gf .PdfRectangle {return _dce .PdfRectangle };func (_fggf paraList )sortReadingOrder (){_db .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 (_fggf ));
if len (_fggf )<=1{return ;};_fggf .computeEBBoxes ();_ed .Slice (_fggf ,func (_aeba ,_cadd int )bool {return _bacde (_fggf [_aeba ],_fggf [_cadd ])<=0});_fcc :=_fggf .topoOrder ();_fggf .reorder (_fcc );};func (_gdeb *wordBag )allWords ()[]*textWord {var _abb []*textWord ;
for _ ,_edge :=range _gdeb ._gceg {_abb =append (_abb ,_edge ...);};return _abb ;};func _cacc (_aefb map[int ][]float64 )[]int {_aadcg :=make ([]int ,len (_aefb ));_gadaf :=0;for _cdgb :=range _aefb {_aadcg [_gadaf ]=_cdgb ;_gadaf ++;};_ed .Ints (_aadcg );
return _aadcg ;};func (_cdaag rulingList )bbox ()_gf .PdfRectangle {var _cffd _gf .PdfRectangle ;if len (_cdaag )==0{_db .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 _gf .PdfRectangle {};};if _cdaag [0]._ffag ==_egaad {_cffd .Llx ,_cffd .Urx =_cdaag .secMinMax ();_cffd .Lly ,_cffd .Ury =_cdaag .primMinMax ();}else {_cffd .Llx ,_cffd .Urx =_cdaag .primMinMax ();_cffd .Lly ,_cffd .Ury =_cdaag .secMinMax ();};return _cffd ;
};type subpath struct{_ecc []_ae .Point ;_bcfb bool ;};func (_ccaa *textTable )reduce ()*textTable {_cdbb :=make ([]int ,0,_ccaa ._baffe );_dcdg :=make ([]int ,0,_ccaa ._cecgg );for _ccdc :=0;_ccdc < _ccaa ._baffe ;_ccdc ++{if !_ccaa .emptyRow (_ccdc ){_cdbb =append (_cdbb ,_ccdc );
};};for _gacdb :=0;_gacdb < _ccaa ._cecgg ;_gacdb ++{if !_ccaa .emptyColumn (_gacdb ){_dcdg =append (_dcdg ,_gacdb );};};if len (_cdbb )==_ccaa ._baffe &&len (_dcdg )==_ccaa ._cecgg {return _ccaa ;};_bdcfd :=textTable {_egabb :_ccaa ._egabb ,_cecgg :len (_dcdg ),_baffe :len (_cdbb ),_bfdd :make (map[uint64 ]*textPara ,len (_dcdg )*len (_cdbb ))};
if _cecg {_db .Log .Info ("\u0072\u0065\u0064\u0075ce\u003a\u0020\u0025\u0064\u0078\u0025\u0064\u0020\u002d\u003e\u0020\u0025\u0064\u0078%\u0064",_ccaa ._cecgg ,_ccaa ._baffe ,len (_dcdg ),len (_cdbb ));_db .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_dcdg );
_db .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_cdbb );};for _abbbf ,_afbf :=range _cdbb {for _aede ,_adac :=range _dcdg {_cgff :=_ccaa .get (_adac ,_afbf );if _cgff ==nil {continue ;};if _cecg {_af .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_aede ,_abbbf ,_adac ,_afbf ,_baeb (_cgff .text (),50));
};_bdcfd .put (_aede ,_abbbf ,_cgff );};};return &_bdcfd ;};
// 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 (_dg *Extractor )ExtractPageImages (options *ImageExtractOptions )(*PageImages ,error ){_cf :=&imageExtractContext {_fe :options };_be :=_cf .extractContentStreamImages (_dg ._dc ,_dg ._eg );if _be !=nil {return nil ,_be ;};return &PageImages {Images :_cf ._dcb },nil ;
};func _bdfb (_aceg _ae .Point )*subpath {return &subpath {_ecc :[]_ae .Point {_aceg }}};func _fgfa (_feba func (*wordBag ,*textWord ,float64 )bool ,_bcadd float64 )func (*wordBag ,*textWord )bool {return func (_cffc *wordBag ,_fdae *textWord )bool {return _feba (_cffc ,_fdae ,_bcadd )};
};func (_bbcg *textTable )markCells (){for _bfcgb :=0;_bfcgb < _bbcg ._baffe ;_bfcgb ++{for _ebd :=0;_ebd < _bbcg ._cecgg ;_ebd ++{_bffa :=_bbcg .get (_ebd ,_bfcgb );if _bffa !=nil {_bffa ._fbdf =true ;};};};};
// String returns a description of `state`.
func (_fga *textState )String ()string {_ebc :="\u005bN\u004f\u0054\u0020\u0053\u0045\u0054]";if _fga ._bff !=nil {_ebc =_fga ._bff .BaseFont ();};return _af .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",_fga ._afd ,_fga ._ebbff ,_fga ._cbea ,_ebc );
};
// 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 (_egf PageText )ToText ()string {return _egf .Text ()};
// 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 (_ecegb rulingList )secMinMax ()(float64 ,float64 ){_bgbf ,_gdag :=_ecegb [0]._bbgb ,_ecegb [0]._daed ;for _ ,_bceb :=range _ecegb [1:]{if _bceb ._bbgb < _bgbf {_bgbf =_bceb ._bbgb ;};if _bceb ._daed > _gdag {_gdag =_bceb ._daed ;
};};return _bgbf ,_gdag ;};func (_bece gridTile )contains (_gbabg _gf .PdfRectangle )bool {if _bece .numBorders ()< 3{return false ;};if _bece ._gebef &&_gbabg .Llx < _bece .Llx -_fea {return false ;};if _bece ._gbcae &&_gbabg .Urx > _bece .Urx +_fea {return false ;
};if _bece ._cfgb &&_gbabg .Lly < _bece .Lly -_fea {return false ;};if _bece ._abeaf &&_gbabg .Ury > _bece .Ury +_fea {return false ;};return true ;};func (_fbb *wordBag )depthRange (_aabd ,_gdb int )[]int {var _age []int ;for _edda :=range _fbb ._gceg {if _aabd <=_edda &&_edda <=_gdb {_age =append (_age ,_edda );
};};if len (_age )==0{return nil ;};_ed .Ints (_age );return _age ;};func _fbfd (_ecggcg float64 )bool {return _ec .Abs (_ecggcg )< _cade };func (_edgf *textObject )setTextLeading (_bed float64 ){if _edgf ==nil {return ;};_edgf ._gfc ._bceg =_bed ;};func _gedc (_dcebe []rulingList )(rulingList ,rulingList ){var _gcd rulingList ;
for _ ,_fdeg :=range _dcebe {_gcd =append (_gcd ,_fdeg ...);};return _gcd .vertsHorzs ();};func (_ebaa *textObject )setWordSpacing (_cbd float64 ){if _ebaa ==nil {return ;};_ebaa ._gfc ._ebbff =_cbd ;};func (_adf *textObject )nextLine (){_adf .moveLP (0,-_adf ._gfc ._bceg )};
// 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 (_afb *PageText )ApplyArea (bbox _gf .PdfRectangle ){_dea :=make ([]*textMark ,0,len (_afb ._gefac ));for _ ,_dafe :=range _afb ._gefac {if _eadg (_dafe .bbox (),bbox ){_dea =append (_dea ,_dafe );};};var _cbge paraList ;_baa :=len (_dea );for _eebf :=0;
_eebf < 360&&_baa > 0;_eebf +=90{_agdg :=make ([]*textMark ,0,len (_dea )-_baa );for _ ,_aecc :=range _dea {if _aecc ._bcbg ==_eebf {_agdg =append (_agdg ,_aecc );};};if len (_agdg )> 0{_fbde :=_cfbg (_agdg ,_afb ._bbbf ,nil ,nil );_cbge =append (_cbge ,_fbde ...);
_baa -=len (_agdg );};};_dbge :=new (_cc .Buffer );_cbge .writeText (_dbge );_afb ._gece =_dbge .String ();_afb ._bcf =_cbge .toTextMarks ();_afb ._adbb =_cbge .tables ();};func (_cbfc *textObject )setTextRenderMode (_bfa int ){if _cbfc ==nil {return ;
};_cbfc ._gfc ._bfeb =RenderMode (_bfa );};type shapesState struct{_gdgc _ae .Matrix ;_bdc _ae .Matrix ;_bcd []*subpath ;_fag bool ;_aeeg _ae .Point ;_bdb *textObject ;};
// Len returns the number of TextMarks in `ma`.
func (_fcdc *TextMarkArray )Len ()int {if _fcdc ==nil {return 0;};return len (_fcdc ._ece );};func _acce (_egag ,_fgc _gf .PdfRectangle )bool {return _egag .Llx <=_fgc .Llx &&_fgc .Urx <=_egag .Urx &&_egag .Lly <=_fgc .Lly &&_fgc .Ury <=_egag .Ury ;};func _gca (_cfe *Extractor ,_egbd *_gf .PdfPageResources ,_ggg _gb .GraphicsState ,_fdba *textState ,_bcbc *stateStack )*textObject {return &textObject {_aab :_cfe ,_fgg :_egbd ,_caa :_ggg ,_egd :_bcbc ,_gfc :_fdba ,_abdc :_ae .IdentityMatrix (),_ade :_ae .IdentityMatrix ()};
};const (_cade =1.0e-6;_fece =1.0e-4;_dfff =10;_edfbd =6;_bfgae =0.5;_bdef =0.12;_acac =0.19;_ebbffb =0.04;_dcdbdb =0.04;_fgcf =1.0;_dbba =0.04;_faeac =0.4;_egdc =0.7;_gbab =1.0;_ebge =0.1;_cafc =1.4;_cef =0.46;_dgaa =0.02;_fdbf =0.2;_ceef =0.5;_deed =4;
_eebcc =4.0;_acec =6;_bbcb =0.3;_cacd =0.01;_cbfg =0.02;_cgbc =2;_cbec =2;_gdef =500;_bfab =4.0;_bgfg =4.0;_defg =0.05;_bfae =0.1;_gcgc =2.0;_bcac =2.0;_fea =1.5;_ffc =3.0;_aedb =0.25;);func _dafcc (_eddc _gf .PdfRectangle )*ruling {return &ruling {_ffag :_egaad ,_adee :_eddc .Ury ,_bbgb :_eddc .Llx ,_daed :_eddc .Urx };
};func _cfdf (_beba string )bool {if _a .RuneCountInString (_beba )< _deed {return false ;};_ebgc ,_dced :=_a .DecodeLastRuneInString (_beba );if _dced <=0||!_bc .Is (_bc .Hyphen ,_ebgc ){return false ;};_ebgc ,_dced =_a .DecodeLastRuneInString (_beba [:len (_beba )-_dced ]);
return _dced > 0&&!_bc .IsSpace (_ebgc );};func _ebfd (_fffa ,_gdcgg *textPara )bool {if _fffa ._fbcfc ||_gdcgg ._fbcfc {return true ;};return _fbfd (_fffa .depth ()-_gdcgg .depth ());};func (_adfd *shapesState )newSubPath (){_adfd .clearPath ();if _abef {_db .Log .Info ("\u006e\u0065\u0077\u0053\u0075\u0062\u0050\u0061\u0074h\u003a\u0020\u0025\u0073",_adfd );
};};func (_abgdf *ruling )alignsSec (_fgba *ruling )bool {const _gcfcd =_bcac +1.0;return _abgdf ._bbgb -_gcfcd <=_fgba ._daed &&_fgba ._bbgb -_gcfcd <=_abgdf ._daed ;};
// String returns a description of `t`.
func (_feaf *textTable )String ()string {return _af .Sprintf ("\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u0020\u0025\u0074",_feaf ._cecgg ,_feaf ._baffe ,_feaf ._egabb );};func (_efggf *textTable )logComposite (_acab string ){if !_cecg {return ;};_db .Log .Info ("\u007e~\u007eP\u0061\u0072\u0061\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_efggf ._cecgg ,_efggf ._baffe ,_acab );
_af .Printf ("\u0025\u0035\u0073 \u007c","");for _ffdcfg :=0;_ffdcfg < _efggf ._cecgg ;_ffdcfg ++{_af .Printf ("\u0025\u0033\u0064 \u007c",_ffdcfg );};_af .Println ("");_af .Printf ("\u0025\u0035\u0073 \u002b","");for _gfcac :=0;_gfcac < _efggf ._cecgg ;
_gfcac ++{_af .Printf ("\u0025\u0033\u0073 \u002b","\u002d\u002d\u002d");};_af .Println ("");for _bffc :=0;_bffc < _efggf ._baffe ;_bffc ++{_af .Printf ("\u0025\u0035\u0064 \u007c",_bffc );for _fdfd :=0;_fdfd < _efggf ._cecgg ;_fdfd ++{_ccga ,_ :=_efggf ._eagdf [_dddg (_fdfd ,_bffc )].parasBBox ();
_af .Printf ("\u0025\u0033\u0064 \u007c",len (_ccga ));};_af .Println ("");};_db .Log .Info ("\u007e~\u007eT\u0065\u0078\u0074\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_efggf ._cecgg ,_efggf ._baffe ,_acab );_af .Printf ("\u0025\u0035\u0073 \u007c","");
for _ebfaf :=0;_ebfaf < _efggf ._cecgg ;_ebfaf ++{_af .Printf ("\u0025\u0031\u0032\u0064\u0020\u007c",_ebfaf );};_af .Println ("");_af .Printf ("\u0025\u0035\u0073 \u002b","");for _gadbe :=0;_gadbe < _efggf ._cecgg ;_gadbe ++{_af .Print ("\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d-\u002d\u002d\u002d\u002b");
};_af .Println ("");for _acdae :=0;_acdae < _efggf ._baffe ;_acdae ++{_af .Printf ("\u0025\u0035\u0064 \u007c",_acdae );for _ecdge :=0;_ecdge < _efggf ._cecgg ;_ecdge ++{_eeec ,_ :=_efggf ._eagdf [_dddg (_ecdge ,_acdae )].parasBBox ();_beeag :="";_cafbg :=_eeec .merge ();
if _cafbg !=nil {_beeag =_cafbg .text ();};_beeag =_af .Sprintf ("\u0025\u0071",_baeb (_beeag ,12));_beeag =_beeag [1:len (_beeag )-1];_af .Printf ("\u0025\u0031\u0032\u0073\u0020\u007c",_beeag );};_af .Println ("");};};func (_afce *textObject )setHorizScaling (_fefc float64 ){if _afce ==nil {return ;
};_afce ._gfc ._dbga =_fefc ;};func (_abaf rectRuling )checkWidth (_dffdb ,_efaf float64 )(float64 ,bool ){_ebgcee :=_efaf -_dffdb ;_ddfd :=_ebgcee <=_bcac ;return _ebgcee ,_ddfd ;};const _fcbf =1.0/1000.0;const (RenderModeStroke RenderMode =1<<iota ;RenderModeFill ;
RenderModeClip ;);func (_ggfg rulingList )toGrids ()[]rulingList {if _aacf {_db .Log .Info ("t\u006f\u0047\u0072\u0069\u0064\u0073\u003a\u0020\u0025\u0073",_ggfg );};_beage :=_ggfg .intersections ();if _aacf {_db .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 (_ggfg ),len (_beage ));
for _ ,_bcegd :=range _baage (_beage ){_af .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_bcegd ,_beage [_bcegd ]);};};_afaa :=make (map[int ]intSet ,len (_ggfg ));for _cgeb :=range _ggfg {_fbec :=_ggfg .connections (_beage ,_cgeb );if len (_fbec )> 0{_afaa [_cgeb ]=_fbec ;
};};if _aacf {_db .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0063\u006fn\u006e\u0065\u0063\u0074s=\u0025\u0064",len (_afaa ));for _ ,_fgce :=range _baage (_afaa ){_af .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_fgce ,_afaa [_fgce ]);
};};_gcbc :=_gfdbc (len (_ggfg ),func (_ddeb ,_eddfe int )bool {_ggbg ,_fdabg :=len (_afaa [_ddeb ]),len (_afaa [_eddfe ]);if _ggbg !=_fdabg {return _ggbg > _fdabg ;};return _ggfg .comp (_ddeb ,_eddfe );});if _aacf {_db .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u006f\u0072d\u0065\u0072\u0069\u006eg=\u0025\u0076",_gcbc );
};_fcdg :=[][]int {{_gcbc [0]}};_cece :for _ ,_gbba :=range _gcbc [1:]{for _dgeg ,_fade :=range _fcdg {for _ ,_ggacc :=range _fade {if _afaa [_ggacc ].has (_gbba ){_fcdg [_dgeg ]=append (_fade ,_gbba );continue _cece ;};};};_fcdg =append (_fcdg ,[]int {_gbba });
};if _aacf {_db .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020i\u0067\u0072i\u0064\u0073\u003d\u0025\u0076",_fcdg );};_ed .SliceStable (_fcdg ,func (_fabea ,_edff int )bool {return len (_fcdg [_fabea ])> len (_fcdg [_edff ])});for _ ,_efcc :=range _fcdg {_ed .Slice (_efcc ,func (_ggab ,_aace int )bool {return _ggfg .comp (_efcc [_ggab ],_efcc [_aace ])});
};_egcdg :=make ([]rulingList ,len (_fcdg ));for _cdga ,_fcbgg :=range _fcdg {_dffeg :=make (rulingList ,len (_fcbgg ));for _cfec ,_fced :=range _fcbgg {_dffeg [_cfec ]=_ggfg [_fced ];};_egcdg [_cdga ]=_dffeg ;};if _aacf {_db .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020g\u0072\u0069d\u0073\u003d\u0025\u002b\u0076",_egcdg );
};var _egefe []rulingList ;for _ ,_eddfc :=range _egcdg {if _fdfff ,_ebeed :=_eddfc .isActualGrid ();_ebeed {_eddfc =_fdfff ;_eddfc =_eddfc .snapToGroups ();_egefe =append (_egefe ,_eddfc );};};if _aacf {_fcbdd ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0061\u0063t\u0075\u0061\u006c\u0047ri\u0064\u0073",_egefe );
_db .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 (_egcdg ),len (_egefe ));};return _egefe ;};
// New returns an Extractor instance for extracting content from the input PDF page.
func New (page *_gf .PdfPage )(*Extractor ,error ){const _gbe ="\u0065\u0078\u0074\u0072\u0061\u0063\u0074\u006f\u0072\u002e\u004e\u0065\u0077";_aa ,_ac :=page .GetAllContentStreams ();if _ac !=nil {return nil ,_ac ;};_cb ,_ac :=page .GetMediaBox ();if _ac !=nil {return nil ,_af .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",_ac );
};_gg :=&Extractor {_dc :_aa ,_eg :page .Resources ,_edc :*_cb ,_ebg :map[string ]fontEntry {},_aeb :map[string ]textResult {}};if _gg ._edc .Llx > _gg ._edc .Urx {_db .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",_gg ._edc );
_gg ._edc .Llx ,_gg ._edc .Urx =_gg ._edc .Urx ,_gg ._edc .Llx ;};if _gg ._edc .Lly > _gg ._edc .Ury {_db .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",_gg ._edc );
_gg ._edc .Lly ,_gg ._edc .Ury =_gg ._edc .Ury ,_gg ._edc .Lly ;};_bf .TrackUse (_gbe );return _gg ,nil ;};func (_bfdb *textWord )toTextMarks (_gdagg *int )[]TextMark {var _gaab []TextMark ;for _ ,_ggbb :=range _bfdb ._dbgad {_gaab =_ddcg (_gaab ,_gdagg ,_ggbb .ToTextMark ());
};return _gaab ;};func _ecba (_bddc ,_fbeb _ae .Point )rulingKind {_dbbgdf :=_ec .Abs (_bddc .X -_fbeb .X );_ddbf :=_ec .Abs (_bddc .Y -_fbeb .Y );return _bfbc (_dbbgdf ,_ddbf ,_defg );};func (_edb *Extractor )extractPageText (_aga string ,_fd *_gf .PdfPageResources ,_gcc _ae .Matrix ,_beb int )(*PageText ,int ,int ,error ){_db .Log .Trace ("\u0065x\u0074\u0072\u0061\u0063t\u0050\u0061\u0067\u0065\u0054e\u0078t\u003a \u006c\u0065\u0076\u0065\u006c\u003d\u0025d",_beb );
_dfc :=&PageText {_bbbf :_edb ._edc };_acf :=_ebbc (_edb ._edc );_cdd :=stateStack {&_acf };_dbe :=_gca (_edb ,_fd ,_gb .GraphicsState {},&_acf ,&_cdd );_cea :=shapesState {_bdc :_gcc ,_gdgc :_ae .IdentityMatrix (),_bdb :_dbe };var _efb bool ;if _beb > _ege {_gfe :=_dd .New ("\u0066\u006f\u0072\u006d s\u0074\u0061\u0063\u006b\u0020\u006f\u0076\u0065\u0072\u0066\u006c\u006f\u0077");
_db .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",_beb ,_gfe );
return _dfc ,_acf ._bfb ,_acf ._bbbc ,_gfe ;};_gab :=_gb .NewContentStreamParser (_aga );_bgfd ,_fef :=_gab .Parse ();if _fef !=nil {_db .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",_fef );
return _dfc ,_acf ._bfb ,_acf ._bbbc ,_fef ;};_beg :=_gb .NewContentStreamProcessor (*_bgfd );_beg .AddHandler (_gb .HandlerConditionEnumAllOperands ,"",func (_dda *_gb .ContentStreamOperation ,_fdg _gb .GraphicsState ,_ced *_gf .PdfPageResources )error {_egb :=_dda .Operand ;
if _badf {_db .Log .Info ("\u0026&\u0026\u0020\u006f\u0070\u003d\u0025s",_dda );};switch _egb {case "\u0071":if _abef {_db .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_cea ._gdgc );};_cdd .push (&_acf );case "\u0051":if !_cdd .empty (){if len (_cdd )>=2{_cdd .pop ();
};_acf =*_cdd .top ();};_cea ._gdgc =_fdg .CTM ;if _abef {_db .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_cea ._gdgc );};case "\u0042\u0054":if _efb {_db .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");
_dfc ._gefac =append (_dfc ._gefac ,_dbe ._cdad ...);};_efb =true ;_dcbb :=_fdg ;_dcbb .CTM =_gcc .Mult (_dcbb .CTM );_dbe =_gca (_edb ,_ced ,_dcbb ,&_acf ,&_cdd );_cea ._bdb =_dbe ;case "\u0045\u0054":if !_efb {_db .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");
};_efb =false ;_dfc ._gefac =append (_dfc ._gefac ,_dbe ._cdad ...);_dbe .reset ();case "\u0054\u002a":_dbe .nextLine ();case "\u0054\u0064":if _ceg ,_cegd :=_dbe .checkOp (_dda ,2,true );!_ceg {_db .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cegd );
return _cegd ;};_add ,_fda ,_gaa :=_bebgg (_dda .Params );if _gaa !=nil {return _gaa ;};_dbe .moveText (_add ,_fda );case "\u0054\u0044":if _dcg ,_aca :=_dbe .checkOp (_dda ,2,true );!_dcg {_db .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_aca );
return _aca ;};_acfg ,_gga ,_efa :=_bebgg (_dda .Params );if _efa !=nil {_db .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_efa );return _efa ;};_dbe .moveTextSetLeading (_acfg ,_gga );case "\u0054\u006a":if _eag ,_baf :=_dbe .checkOp (_dda ,1,true );
!_eag {_db .Log .Debug ("\u0045\u0052\u0052\u004fR:\u0020\u0054\u006a\u0020\u006f\u0070\u003d\u0025\u0073\u0020\u0065\u0072\u0072\u003d%\u0076",_dda ,_baf );return _baf ;};_cgd ,_cddd :=_gd .GetStringBytes (_dda .Params [0]);if !_cddd {_db .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",_dda );
return _gd .ErrTypeError ;};return _dbe .showText (_cgd );case "\u0054\u004a":if _ccd ,_bca :=_dbe .checkOp (_dda ,1,true );!_ccd {_db .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bca );return _bca ;
};_cfa ,_fcb :=_gd .GetArray (_dda .Params [0]);if !_fcb {_db .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",_dda );
return _fef ;};return _dbe .showTextAdjusted (_cfa );case "\u0027":if _ebe ,_cddg :=_dbe .checkOp (_dda ,1,true );!_ebe {_db .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0027\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cddg );return _cddg ;};_dgd ,_bdg :=_gd .GetStringBytes (_dda .Params [0]);
if !_bdg {_db .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",_dda );return _gd .ErrTypeError ;};_dbe .nextLine ();return _dbe .showText (_dgd );
case "\u0022":if _bgb ,_ceae :=_dbe .checkOp (_dda ,3,true );!_bgb {_db .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0022\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ceae );return _ceae ;};_ggd ,_cead ,_fae :=_bebgg (_dda .Params [:2]);if _fae !=nil {return _fae ;
};_cda ,_gbec :=_gd .GetStringBytes (_dda .Params [2]);if !_gbec {_db .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",_dda );
return _gd .ErrTypeError ;};_dbe .setCharSpacing (_ggd );_dbe .setWordSpacing (_cead );_dbe .nextLine ();return _dbe .showText (_cda );case "\u0054\u004c":_bef ,_gef :=_ccgcd (_dda );if _gef !=nil {_db .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004c\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gef );
return _gef ;};_dbe .setTextLeading (_bef );case "\u0054\u0063":_abf ,_eff :=_ccgcd (_dda );if _eff !=nil {_db .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0063\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_eff );return _eff ;};_dbe .setCharSpacing (_abf );
case "\u0054\u0066":if _dfg ,_cgb :=_dbe .checkOp (_dda ,2,true );!_dfg {_db .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0066\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cgb );return _cgb ;};_facd ,_ede :=_gd .GetNameVal (_dda .Params [0]);if !_ede {_db .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",_dda );
return _gd .ErrTypeError ;};_dfd ,_cfc :=_gd .GetNumberAsFloat (_dda .Params [1]);if !_ede {_db .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",_dda ,_cfc );
return _cfc ;};_cfc =_dbe .setFont (_facd ,_dfd );_dbe ._fgfd =_ag .Is (_cfc ,_gd .ErrNotSupported );if _cfc !=nil &&!_dbe ._fgfd {return _cfc ;};case "\u0054\u006d":if _ccc ,_gdcg :=_dbe .checkOp (_dda ,6,true );!_ccc {_db .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u006d\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gdcg );
return _gdcg ;};_bba ,_bac :=_gd .GetNumbersAsFloat (_dda .Params );if _bac !=nil {_db .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bac );return _bac ;};_dbe .setTextMatrix (_bba );case "\u0054\u0072":if _bbad ,_dbd :=_dbe .checkOp (_dda ,1,true );
!_bbad {_db .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0072\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_dbd );return _dbd ;};_gefa ,_cgf :=_gd .GetIntVal (_dda .Params [0]);if !_cgf {_db .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",_dda );
return _gd .ErrTypeError ;};_dbe .setTextRenderMode (_gefa );case "\u0054\u0073":if _efae ,_edcf :=_dbe .checkOp (_dda ,1,true );!_efae {_db .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0073\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_edcf );return _edcf ;
};_cfac ,_gcea :=_gd .GetNumberAsFloat (_dda .Params [0]);if _gcea !=nil {_db .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gcea );return _gcea ;};_dbe .setTextRise (_cfac );case "\u0054\u0077":if _gda ,_fdf :=_dbe .checkOp (_dda ,1,true );
!_gda {_db .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fdf );return _fdf ;};_dfdd ,_abg :=_gd .GetNumberAsFloat (_dda .Params [0]);if _abg !=nil {_db .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_abg );
return _abg ;};_dbe .setWordSpacing (_dfdd );case "\u0054\u007a":if _eedb ,_gaac :=_dbe .checkOp (_dda ,1,true );!_eedb {_db .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gaac );return _gaac ;};_eede ,_agg :=_gd .GetNumberAsFloat (_dda .Params [0]);
if _agg !=nil {_db .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_agg );return _agg ;};_dbe .setHorizScaling (_eede );case "\u0063\u006d":_cea ._gdgc =_fdg .CTM ;if _cea ._gdgc .Singular (){_dgf :=_ae .IdentityMatrix ().Translate (_cea ._gdgc .Translation ());
_db .Log .Debug ("S\u0069n\u0067\u0075\u006c\u0061\u0072\u0020\u0063\u0074m\u003d\u0025\u0073\u2192%s",_cea ._gdgc ,_dgf );_cea ._gdgc =_dgf ;};if _abef {_db .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_cea ._gdgc );};case "\u006d":if len (_dda .Params )!=2{_db .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",_de );
return nil ;};_bde ,_cfaa :=_gd .GetNumbersAsFloat (_dda .Params );if _cfaa !=nil {return _cfaa ;};_db .Log .Debug ("\u004d\u006f\u0076\u0065\u0020\u0074\u006f\u003a\u0020\u0025\u002e\u0032\u0066",_bde );_cea .moveTo (_bde [0],_bde [1]);case "\u006c":if len (_dda .Params )!=2{_db .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",_de );
return nil ;};_dbc ,_egab :=_gd .GetNumbersAsFloat (_dda .Params );if _egab !=nil {return _egab ;};_cea .lineTo (_dbc [0],_dbc [1]);case "\u0063":if len (_dda .Params )!=6{return _de ;};_fff ,_cde :=_gd .GetNumbersAsFloat (_dda .Params );if _cde !=nil {return _cde ;
};_db .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_fff );_cea .cubicTo (_fff [0],_fff [1],_fff [2],_fff [3],_fff [4],_fff [5]);case "\u0076","\u0079":if len (_dda .Params )!=4{return _de ;
};_bge ,_faa :=_gd .GetNumbersAsFloat (_dda .Params );if _faa !=nil {return _faa ;};_db .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_bge );_cea .quadraticTo (_bge [0],_bge [1],_bge [2],_bge [3]);
case "\u0068":_cea .closePath ();case "\u0072\u0065":if len (_dda .Params )!=4{return _de ;};_ffd ,_cbb :=_gd .GetNumbersAsFloat (_dda .Params );if _cbb !=nil {return _cbb ;};_cea .drawRectangle (_ffd [0],_ffd [1],_ffd [2],_ffd [3]);_cea .closePath ();
case "\u0053":_cea .stroke (&_dfc ._faee );_cea .clearPath ();case "\u0073":_cea .closePath ();_cea .stroke (&_dfc ._faee );_cea .clearPath ();case "\u0046":_cea .fill (&_dfc ._faeea );_cea .clearPath ();case "\u0066","\u0066\u002a":_cea .closePath ();
_cea .fill (&_dfc ._faeea );_cea .clearPath ();case "\u0042","\u0042\u002a":_cea .fill (&_dfc ._faeea );_cea .stroke (&_dfc ._faee );_cea .clearPath ();case "\u0062","\u0062\u002a":_cea .closePath ();_cea .fill (&_dfc ._faeea );_cea .stroke (&_dfc ._faee );
_cea .clearPath ();case "\u006e":_cea .clearPath ();case "\u0044\u006f":if len (_dda .Params )==0{_db .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",_dda .Params );
return _gd .ErrRangeError ;};_baff ,_gfd :=_gd .GetName (_dda .Params [0]);if !_gfd {_db .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",_dda .Params [0]);
return _gd .ErrTypeError ;};_ ,_fab :=_ced .GetXObjectByName (*_baff );if _fab !=_gf .XObjectTypeForm {break ;};_bbb ,_gfd :=_edb ._aeb [_baff .String ()];if !_gfd {_gaf ,_cbc :=_ced .GetXObjectFormByName (*_baff );if _cbc !=nil {_db .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_cbc );
return _cbc ;};_efd ,_cbc :=_gaf .GetContentStream ();if _cbc !=nil {_db .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_cbc );return _cbc ;};_dfbe :=_gaf .Resources ;if _dfbe ==nil {_dfbe =_ced ;};_gaacb ,_ebbf ,_bab ,_cbc :=_edb .extractPageText (string (_efd ),_dfbe ,_gcc .Mult (_fdg .CTM ),_beb +1);
if _cbc !=nil {_db .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_cbc );return _cbc ;};_bbb =textResult {*_gaacb ,_ebbf ,_bab };_edb ._aeb [_baff .String ()]=_bbb ;};_cea ._gdgc =_fdg .CTM ;if _abef {_db .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_cea ._gdgc );
};_dfc ._gefac =append (_dfc ._gefac ,_bbb ._gec ._gefac ...);_dfc ._faee =append (_dfc ._faee ,_bbb ._gec ._faee ...);_dfc ._faeea =append (_dfc ._faeea ,_bbb ._gec ._faeea ...);_acf ._bfb +=_bbb ._aba ;_acf ._bbbc +=_bbb ._gbb ;case "\u0072\u0067","\u0067","\u006b","\u0063\u0073","\u0073\u0063","\u0073\u0063\u006e":_dbe ._caa .ColorspaceNonStroking =_fdg .ColorspaceNonStroking ;
_dbe ._caa .ColorNonStroking =_fdg .ColorNonStroking ;case "\u0052\u0047","\u0047","\u004b","\u0043\u0053","\u0053\u0043","\u0053\u0043\u004e":_dbe ._caa .ColorspaceStroking =_fdg .ColorspaceStroking ;_dbe ._caa .ColorStroking =_fdg .ColorStroking ;};return nil ;
});_fef =_beg .Process (_fd );return _dfc ,_acf ._bfb ,_acf ._bbbc ,_fef ;};func _cfbg (_cbae []*textMark ,_eae _gf .PdfRectangle ,_dcef rulingList ,_dcdbg []gridTiling )paraList {_db .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 (_cbae ),_eae );
if len (_cbae )==0{return nil ;};_cecb :=_dbgcd (_cbae ,_eae );if len (_cecb )==0{return nil ;};_dcef .log ("\u006d\u0061\u006be\u0054\u0065\u0078\u0074\u0050\u0061\u0067\u0065");_gdfg ,_fdgg :=_dcef .vertsHorzs ();_dbbgd :=_gfb (_cecb ,_eae .Ury ,_gdfg ,_fdgg );
_aeccf :=_bgdb (_dbbgd ,_eae .Ury ,_gdfg ,_fdgg );_aeccf =_bgce (_aeccf );_ffbc :=make (paraList ,0,len (_aeccf ));for _ ,_gead :=range _aeccf {_agbc :=_gead .arrangeText ();if _agbc !=nil {_ffbc =append (_ffbc ,_agbc );};};if len (_ffbc )>=_acec {_ffbc =_ffbc .extractTables (_dcdbg );
};_ffbc .sortReadingOrder ();_ffbc .log ("\u0073\u006f\u0072te\u0064\u0020\u0069\u006e\u0020\u0072\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u006f\u0072\u0064\u0065\u0072");return _ffbc ;};func (_gegfg *textTable )newTablePara ()*textPara {_bagg :=_gegfg .computeBbox ();
_ecee :=&textPara {PdfRectangle :_bagg ,_afae :_bagg ,_gagb :_gegfg };if _cecg {_db .Log .Info ("\u006e\u0065w\u0054\u0061\u0062l\u0065\u0050\u0061\u0072\u0061\u003a\u0020\u0025\u0073",_ecee );};return _ecee ;};func (_gcbff rulingList )removeDuplicates ()rulingList {if len (_gcbff )==0{return nil ;
};_gcbff .sort ();_efe :=rulingList {_gcbff [0]};for _ ,_eaff :=range _gcbff [1:]{if _eaff .equals (_efe [len (_efe )-1]){continue ;};_efe =append (_efe ,_eaff );};return _efe ;};func (_ebaae rulingList )snapToGroupsDirection ()rulingList {_ebaae .sortStrict ();
_abcd :=make (map[*ruling ]rulingList ,len (_ebaae ));_fgecc :=_ebaae [0];_agcd :=func (_acdf *ruling ){_fgecc =_acdf ;_abcd [_fgecc ]=rulingList {_acdf }};_agcd (_ebaae [0]);for _ ,_bccf :=range _ebaae [1:]{if _bccf ._adee < _fgecc ._adee -_cade {_db .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",_fgecc ,_bccf );
};if _bccf ._adee > _fgecc ._adee +_bcac {_agcd (_bccf );}else {_abcd [_fgecc ]=append (_abcd [_fgecc ],_bccf );};};_aafb :=make (map[*ruling ]float64 ,len (_abcd ));_aecgf :=make (map[*ruling ]*ruling ,len (_ebaae ));for _eeag ,_bfcg :=range _abcd {_aafb [_eeag ]=_bfcg .mergePrimary ();
for _ ,_afcbc :=range _bfcg {_aecgf [_afcbc ]=_eeag ;};};for _ ,_bccca :=range _ebaae {_bccca ._adee =_aafb [_aecgf [_bccca ]];};_bdfgc :=make (rulingList ,0,len (_ebaae ));for _ ,_bgbd :=range _abcd {_daead :=_bgbd .splitSec ();for _bfeca ,_fgecf :=range _daead {_feca :=_fgecf .merge ();
if len (_bdfgc )> 0{_bagcc :=_bdfgc [len (_bdfgc )-1];if _bagcc .alignsPrimary (_feca )&&_bagcc .alignsSec (_feca ){_db .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",_bfeca ,_bagcc ,_feca );
continue ;};};_bdfgc =append (_bdfgc ,_feca );};};_bdfgc .sortStrict ();return _bdfgc ;};func _cagf (_effd ,_geedg _ae .Point ,_cfdfa _g .Color )(*ruling ,bool ){_gfcc :=lineRuling {_gagbg :_effd ,_ggee :_geedg ,_fadc :_aebc (_effd ,_geedg ),Color :_cfdfa };
if _gfcc ._fadc ==_cdcd {return nil ,false ;};return _gfcc .asRuling ();};func (_gfcbc rulingList )findPrimSec (_cbcd ,_gdbe float64 )*ruling {for _ ,_aced :=range _gfcbc {if _fbfd (_aced ._adee -_cbcd )&&_aced ._bbgb -_gcgc <=_gdbe &&_gdbe <=_aced ._daed +_gcgc {return _aced ;
};};return nil ;};func (_beed *shapesState )establishSubpath ()*subpath {_accb ,_fcge :=_beed .lastpointEstablished ();if !_fcge {_beed ._bcd =append (_beed ._bcd ,_bdfb (_accb ));};if len (_beed ._bcd )==0{return nil ;};_beed ._fag =false ;return _beed ._bcd [len (_beed ._bcd )-1];
};func _bebgg (_acedf []_gd .PdfObject )(_bbfb ,_fddga float64 ,_bbdfa error ){if len (_acedf )!=2{return 0,0,_af .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 (_acedf ));
};_fdecc ,_bbdfa :=_gd .GetNumbersAsFloat (_acedf );if _bbdfa !=nil {return 0,0,_bbdfa ;};return _fdecc [0],_fdecc [1],nil ;};func (_abdd *textPara )writeCellText (_bbde _b .Writer ){for _bgfgg ,_ceaec :=range _abdd ._ccgcb {_cdba :=_ceaec .text ();_fdcf :=_fddad &&_ceaec .endsInHyphen ()&&_bgfgg !=len (_abdd ._ccgcb )-1;
if _fdcf {_cdba =_dfec (_cdba );};_bbde .Write ([]byte (_cdba ));if !(_fdcf ||_bgfgg ==len (_abdd ._ccgcb )-1){_bbde .Write ([]byte (_adde (_ceaec ._dbbgg ,_abdd ._ccgcb [_bgfgg +1]._dbbgg )));};};};
// Extractor stores and offers functionality for extracting content from PDF pages.
type Extractor struct{_dc string ;_eg *_gf .PdfPageResources ;_edc _gf .PdfRectangle ;_ebg map[string ]fontEntry ;_aeb map[string ]textResult ;_f int64 ;_ba int ;};
// 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 (_baed *textPara )fontsize ()float64 {return _baed ._ccgcb [0]._dfaf };
// TextMarkArray is a collection of TextMarks.
type TextMarkArray struct{_ece []TextMark };
// ToTextMark returns the public view of `tm`.
func (_affd *textMark )ToTextMark ()TextMark {return TextMark {Text :_affd ._ebce ,Original :_affd ._eabe ,BBox :_affd ._deb ,Font :_affd ._cagg ,FontSize :_affd ._bbab ,FillColor :_affd ._eeac ,StrokeColor :_affd ._dbbcb ,Orientation :_affd ._bcbg };};
// 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 (_cca *Extractor )ExtractText ()(string ,error ){_bce ,_ ,_ ,_caf :=_cca .ExtractTextWithStats ();return _bce ,_caf ;};func _bafd (_gdeg *textWord ,_fdga float64 ,_bgfe ,_cfbc rulingList )*wordBag {_agcg :=_ggacg (_gdeg ._fecd );_bfec :=[]*textWord {_gdeg };
_dga :=wordBag {_gceg :map[int ][]*textWord {_agcg :_bfec },PdfRectangle :_gdeg .PdfRectangle ,_agbd :_gdeg ._ceafb ,_efdc :_fdga ,_efbc :_bgfe ,_daa :_cfbc };return &_dga ;};func (_egaa *imageExtractContext )extractXObjectImage (_gc *_gd .PdfObjectName ,_geg _gb .GraphicsState ,_agb *_gf .PdfPageResources )error {_cbe ,_ :=_agb .GetXObjectByName (*_gc );
if _cbe ==nil {return nil ;};_cag ,_eeg :=_egaa ._acb [_cbe ];if !_eeg {_bd ,_agf :=_agb .GetXObjectImageByName (*_gc );if _agf !=nil {return _agf ;};if _bd ==nil {return nil ;};_ffb ,_agf :=_bd .ToImage ();if _agf !=nil {return _agf ;};_cag =&cachedImage {_ga :_ffb ,_eed :_bd .ColorSpace };
_egaa ._acb [_cbe ]=_cag ;};_ffbf :=_cag ._ga ;_ef :=_cag ._eed ;_eee ,_ddc :=_ef .ImageToRGB (*_ffbf );if _ddc !=nil {return _ddc ;};_db .Log .Debug ("@\u0044\u006f\u0020\u0043\u0054\u004d\u003a\u0020\u0025\u0073",_geg .CTM .String ());_agd :=ImageMark {Image :&_eee ,Width :_geg .CTM .ScalingFactorX (),Height :_geg .CTM .ScalingFactorY (),Angle :_geg .CTM .Angle ()};
_agd .X ,_agd .Y =_geg .CTM .Translation ();_egaa ._dcb =append (_egaa ._dcb ,_agd );_egaa ._bg ++;return nil ;};func (_ebbcc paraList )extractTables (_beecg []gridTiling )paraList {if _cecg {_db .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 (_ebbcc ));
};if len (_ebbcc )< _acec {return _ebbcc ;};_fdede :=_ebbcc .findTables (_beecg );if _cecg {_db .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 (_fdede ));
for _abbg ,_bedag :=range _fdede {_bedag .log (_af .Sprintf ("c\u006f\u006d\u0062\u0069\u006e\u0065\u0064\u0020\u0025\u0064",_abbg ));};};return _ebbcc .applyTables (_fdede );};type textResult struct{_gec PageText ;_aba int ;_gbb int ;};
// 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 (_bbg *Extractor )ExtractPageText ()(*PageText ,int ,int ,error ){_ecgf ,_dfb ,_ggc ,_fac :=_bbg .extractPageText (_bbg ._dc ,_bbg ._eg ,_ae .IdentityMatrix (),0);if _fac !=nil {return nil ,0,0,_fac ;};_ecgf .computeViews ();_fac =_bafgf (_ecgf );
if _fac !=nil {return nil ,0,0,_fac ;};return _ecgf ,_dfb ,_ggc ,nil ;};func (_eebcda *textTable )compositeRowCorridors ()map[int ][]float64 {_gfdb :=make (map[int ][]float64 ,_eebcda ._baffe );if _cecg {_db .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",_eebcda ._baffe );
};for _dafb :=1;_dafb < _eebcda ._baffe ;_dafb ++{var _bacbg []compositeCell ;for _gcdb :=0;_gcdb < _eebcda ._cecgg ;_gcdb ++{if _cbag ,_faecc :=_eebcda ._eagdf [_dddg (_gcdb ,_dafb )];_faecc {_bacbg =append (_bacbg ,_cbag );};};if len (_bacbg )==0{continue ;
};_edfbda :=_bcgd (_bacbg );_gfdb [_dafb ]=_edfbda ;if _cecg {_af .Printf ("\u0020\u0020\u0020\u0025\u0032\u0064\u003a\u0020\u00256\u002e\u0032\u0066\u000a",_dafb ,_edfbda );};};return _gfdb ;};func (_aea *wordBag )depthIndexes ()[]int {if len (_aea ._gceg )==0{return nil ;
};_dccc :=make ([]int ,len (_aea ._gceg ));_dcdb :=0;for _faacd :=range _aea ._gceg {_dccc [_dcdb ]=_faacd ;_dcdb ++;};_ed .Ints (_dccc );return _dccc ;};func _daae (_cgge ,_abcc float64 )bool {return _cgge /_ec .Max (_bfae ,_abcc )< _defg };var _deecb =map[markKind ]string {_ded :"\u0073\u0074\u0072\u006f\u006b\u0065",_gbge :"\u0066\u0069\u006c\u006c",_abfb :"\u0061u\u0067\u006d\u0065\u006e\u0074"};
func (_dfgb *wordBag )firstWord (_fcfd int )*textWord {return _dfgb ._gceg [_fcfd ][0]};
// String returns a description of `l`.
func (_daggb *textLine )String ()string {return _af .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",_daggb ._dbbgg ,_daggb .PdfRectangle ,_daggb ._dfaf ,_daggb .text ());
};func (_gad *wordBag )firstReadingIndex (_bdcf int )int {_efab :=_gad .firstWord (_bdcf )._ceafb ;_aac :=float64 (_bdcf +1)*_edfbd ;_ffe :=_aac +_eebcc *_efab ;_fdbg :=_bdcf ;for _ ,_begc :=range _gad .depthBand (_aac ,_ffe ){if _dad (_gad .firstWord (_begc ),_gad .firstWord (_fdbg ))< 0{_fdbg =_begc ;
};};return _fdbg ;};func (_edba *textPara )bbox ()_gf .PdfRectangle {return _edba .PdfRectangle };func (_efbf paraList )findGridTables (_aafee []gridTiling )[]*textTable {if _cecg {_db .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 (_efbf ));
for _fcce ,_ffbd :=range _efbf {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_fcce ,_ffbd );};};var _abada []*textTable ;for _dfdae ,_bbba :=range _aafee {_gfcde ,_fcaa :=_efbf .findTableGrid (_bbba );if _gfcde !=nil {_gfcde .log (_af .Sprintf ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0057\u0069\u0074\u0068\u0047\u0072\u0069\u0064\u0073\u003a\u0020%\u0064",_dfdae ));
_abada =append (_abada ,_gfcde );_gfcde .markCells ();};for _gecf :=range _fcaa {_gecf ._fbdf =true ;};};if _cecg {_db .Log .Info ("\u0066i\u006e\u0064\u0047\u0072i\u0064\u0054\u0061\u0062\u006ce\u0073:\u0020%\u0064\u0020\u0074\u0061\u0062\u006c\u0065s",len (_abada ));
};return _abada ;};
// 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 _bfeaa (_gebb []*textWord ,_ebbeag int )[]*textWord {_decg :=len (_gebb );copy (_gebb [_ebbeag :],_gebb [_ebbeag +1:]);return _gebb [:_decg -1];};func (_dbf *imageExtractContext )processOperand (_cbg *_gb .ContentStreamOperation ,_aec _gb .GraphicsState ,_ce *_gf .PdfPageResources )error {if _cbg .Operand =="\u0042\u0049"&&len (_cbg .Params )==1{_bgf ,_dbg :=_cbg .Params [0].(*_gb .ContentStreamInlineImage );
if !_dbg {return nil ;};if _gba ,_gbg :=_gd .GetBoolVal (_bgf .ImageMask );_gbg {if _gba &&!_dbf ._fe .IncludeInlineStencilMasks {return nil ;};};return _dbf .extractInlineImage (_bgf ,_aec ,_ce );}else if _cbg .Operand =="\u0044\u006f"&&len (_cbg .Params )==1{_dde ,_afc :=_gd .GetName (_cbg .Params [0]);
if !_afc {_db .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0079\u0070\u0065");return _eb ;};_ ,_eef :=_ce .GetXObjectByName (*_dde );switch _eef {case _gf .XObjectTypeImage :return _dbf .extractXObjectImage (_dde ,_aec ,_ce );case _gf .XObjectTypeForm :return _dbf .extractFormImages (_dde ,_aec ,_ce );
};};return nil ;};func (_eeeg *textPara )toCellTextMarks (_eabf *int )[]TextMark {var _bffd []TextMark ;for _geac ,_cbgb :=range _eeeg ._ccgcb {_bgcc :=_cbgb .toTextMarks (_eabf );_faef :=_fddad &&_cbgb .endsInHyphen ()&&_geac !=len (_eeeg ._ccgcb )-1;
if _faef {_bgcc =_fbeg (_bgcc ,_eabf );};_bffd =append (_bffd ,_bgcc ...);if !(_faef ||_geac ==len (_eeeg ._ccgcb )-1){_bffd =_adaea (_bffd ,_eabf ,_adde (_cbgb ._dbbgg ,_eeeg ._ccgcb [_geac +1]._dbbgg ));};};return _bffd ;};func (_eab *imageExtractContext )extractFormImages (_cd *_gd .PdfObjectName ,_cdg _gb .GraphicsState ,_ab *_gf .PdfPageResources )error {_aag ,_bcb :=_ab .GetXObjectFormByName (*_cd );
if _bcb !=nil {return _bcb ;};if _aag ==nil {return nil ;};_eeb ,_bcb :=_aag .GetContentStream ();if _bcb !=nil {return _bcb ;};_gdc :=_aag .Resources ;if _gdc ==nil {_gdc =_ab ;};_bcb =_eab .extractContentStreamImages (string (_eeb ),_gdc );if _bcb !=nil {return _bcb ;
};_eab ._ee ++;return nil ;};func _ebbc (_bbf _gf .PdfRectangle )textState {return textState {_dbga :100,_bfeb :RenderModeFill ,_fce :_bbf };};func (_cbbd *textObject )getStrokeColor ()_g .Color {return _fbgg (_cbbd ._caa .ColorspaceStroking ,_cbbd ._caa .ColorStroking );
};func (_cefa *textLine )text ()string {var _bbga []string ;for _ ,_gfca :=range _cefa ._egcb {if _gfca ._bfad {_bbga =append (_bbga ,"\u0020");};_bbga =append (_bbga ,_gfca ._abceb );};return _e .Join (_bbga ,"");};func (_dgcb paraList )findTables (_gfgd []gridTiling )[]*textTable {_dgcb .addNeighbours ();
_ed .Slice (_dgcb ,func (_egdbg ,_agcdb int )bool {return _def (_dgcb [_egdbg ],_dgcb [_agcdb ])< 0});var _cfdab []*textTable ;if _bebg {_bccb :=_dgcb .findGridTables (_gfgd );_cfdab =append (_cfdab ,_bccb ...);};if _edfb {_bgeb :=_dgcb .findTextTables ();
_cfdab =append (_cfdab ,_bgeb ...);};return _cfdab ;};func _cfba (_cfaf ,_bbdf _gf .PdfRectangle )bool {return _cfaf .Lly <=_bbdf .Ury &&_bbdf .Lly <=_cfaf .Ury ;};func _acbd (_bebgd ,_begd *textPara )bool {return _bdd (_bebgd ._afae ,_begd ._afae )};func _bdeeb (_agee map[float64 ]map[float64 ]gridTile )[]float64 {_effc :=make ([]float64 ,0,len (_agee ));
_eead :=make (map[float64 ]struct{},len (_agee ));for _ ,_cdcdb :=range _agee {for _gefdb :=range _cdcdb {if _ ,_egeee :=_eead [_gefdb ];_egeee {continue ;};_effc =append (_effc ,_gefdb );_eead [_gefdb ]=struct{}{};};};_ed .Float64s (_effc );return _effc ;
};func (_bace *textObject )renderText (_eaga []byte )error {if _bace ._fgfd {_db .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 ;};_ada :=_bace .getCurrentFont ();_ebcc :=_ada .BytesToCharcodes (_eaga );_ggeg ,_cdada ,_faf :=_ada .CharcodesToStrings (_ebcc );if _faf > 0{_db .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",_cdada ,_faf );
};_bace ._gfc ._bfb +=_cdada ;_bace ._gfc ._bbbc +=_faf ;_aaf :=_bace ._gfc ;_cfca :=_aaf ._cbea ;_cce :=_aaf ._dbga /100.0;_cdac :=_fcbf ;if _ada .Subtype ()=="\u0054\u0079\u0070e\u0033"{_cdac =1;};_abe ,_bfed :=_ada .GetRuneMetrics (' ');if !_bfed {_abe ,_bfed =_ada .GetCharMetrics (32);
};if !_bfed {_abe ,_ =_gf .DefaultFont ().GetRuneMetrics (' ');};_dbb :=_abe .Wx *_cdac ;_db .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",_dbb ,_ggeg ,_ada ,_cfca );
_gcg :=_ae .NewMatrix (_cfca *_cce ,0,0,_cfca ,0,_aaf ._aee );if _cabg {_db .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 (_ebcc ),_ebcc ,_ggeg );
};_db .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 (_ebcc ),_ebcc ,len (_ggeg ));_fbf :=_bace .getFillColor ();
_ead :=_bace .getStrokeColor ();for _ddab ,_ggac :=range _ggeg {_aeec :=[]rune (_ggac );if len (_aeec )==1&&_aeec [0]=='\x00'{continue ;};_da :=_ebcc [_ddab ];_aedc :=_bace ._caa .CTM .Mult (_bace ._abdc ).Mult (_gcg );_dac :=0.0;if len (_aeec )==1&&_aeec [0]==32{_dac =_aaf ._ebbff ;
};_dffe ,_eac :=_ada .GetCharMetrics (_da );if !_eac {_db .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",_da ,_aeec ,_aeec ,_ada );
return _af .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",_ada .String (),_da );};_aef :=_ae .Point {X :_dffe .Wx *_cdac ,Y :_dffe .Wy *_cdac };
_fefa :=_ae .Point {X :(_aef .X *_cfca +_dac )*_cce };_fffc :=_ae .Point {X :(_aef .X *_cfca +_aaf ._afd +_dac )*_cce };if _cabg {_db .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",_cfca ,_aaf ._afd ,_aaf ._ebbff ,_cce );
_db .Log .Info ("\u0064x\u002c\u0064\u0079\u003d%\u002e\u0033\u0066\u0020\u00740\u003d%\u002e3\u0066\u0020\u0074\u003d\u0025\u002e\u0033f",_aef ,_fefa ,_fffc );};_agaa :=_dae (_fefa );_aaa :=_dae (_fffc );_fcg :=_bace ._caa .CTM .Mult (_bace ._abdc ).Mult (_agaa );
if _ccea {_db .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",_bace ._caa .CTM ,_bace ._abdc ,_aaa ,_bagc (_bace ._caa .CTM .Mult (_bace ._abdc ).Mult (_aaa )),_agaa ,_fcg ,_bagc (_fcg ));
};_gag ,_adb :=_bace .newTextMark (_ad .ExpandLigatures (_aeec ),_aedc ,_bagc (_fcg ),_ec .Abs (_dbb *_aedc .ScalingFactorX ()),_ada ,_bace ._gfc ._afd ,_fbf ,_ead );if !_adb {_db .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 _ada ==nil {_db .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u004e\u006f\u0020\u0066\u006f\u006e\u0074\u002e");}else if _ada .Encoder ()==nil {_db .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",_ada );
}else {if _eefc ,_baea :=_ada .Encoder ().CharcodeToRune (_da );_baea {_gag ._eabe =string (_eefc );};};_db .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",_ddab ,_da ,_gag ,_aedc );
_bace ._cdad =append (_bace ._cdad ,&_gag );_bace ._abdc .Concat (_aaa );};return nil ;};type event struct{_gbdgg float64 ;_fbfe bool ;_fagc int ;};type gridTile struct{_gf .PdfRectangle ;_abeaf ,_gebef ,_cfgb ,_gbcae bool ;};func (_fde *shapesState )quadraticTo (_fefad ,_efg ,_gcf ,_gfg float64 ){if _abef {_db .Log .Info ("\u0071\u0075\u0061d\u0072\u0061\u0074\u0069\u0063\u0054\u006f\u003a");
};_fde .addPoint (_gcf ,_gfg );};func _agccd (_adebd ,_gebf int )int {if _adebd < _gebf {return _adebd ;};return _gebf ;};func (_fbac *compositeCell )updateBBox (){for _ ,_aafaa :=range _fbac .paraList {_fbac .PdfRectangle =_cffe (_fbac .PdfRectangle ,_aafaa .PdfRectangle );
};};func (_fdff *shapesState )moveTo (_cge ,_dbbb float64 ){_fdff ._fag =true ;_fdff ._aeeg =_fdff .devicePoint (_cge ,_dbbb );if _abef {_db .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",_cge ,_dbbb ,_fdff ._aeeg );
};};func (_fafb *textTable )isExportable ()bool {if _fafb ._egabb {return true ;};_dfba :=func (_ecbc int )bool {_gdff :=_fafb .get (0,_ecbc );if _gdff ==nil {return false ;};_ecgb :=_gdff .text ();_gfcab :=_a .RuneCountInString (_ecgb );_acba :=_ecebg .MatchString (_ecgb );
return _gfcab <=1||_acba ;};for _cgga :=0;_cgga < _fafb ._baffe ;_cgga ++{if !_dfba (_cgga ){return true ;};};return false ;};func (_gdcf rulingList )merge ()*ruling {_bdaa :=_gdcf [0]._adee ;_eccb :=_gdcf [0]._bbgb ;_gdaeb :=_gdcf [0]._daed ;for _ ,_agfb :=range _gdcf [1:]{_bdaa +=_agfb ._adee ;
if _agfb ._bbgb < _eccb {_eccb =_agfb ._bbgb ;};if _agfb ._daed > _gdaeb {_gdaeb =_agfb ._daed ;};};_dbde :=&ruling {_ffag :_gdcf [0]._ffag ,_fgcfb :_gdcf [0]._fgcfb ,Color :_gdcf [0].Color ,_adee :_bdaa /float64 (len (_gdcf )),_bbgb :_eccb ,_daed :_gdaeb };
if _ecbd {_db .Log .Info ("\u006de\u0072g\u0065\u003a\u0020\u0025\u0032d\u0020\u0076e\u0063\u0073\u0020\u0025\u0073",len (_gdcf ),_dbde );for _bfcgc ,_egfce :=range _gdcf {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_bfcgc ,_egfce );
};};return _dbde ;};func _bagc (_fefe _ae .Matrix )_ae .Point {_egbg ,_ebee :=_fefe .Translation ();return _ae .Point {X :_egbg ,Y :_ebee };};func (_fdcc *textTable )putComposite (_caga ,_agff int ,_ggfef paraList ,_decb _gf .PdfRectangle ){if len (_ggfef )==0{_db .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 ;};_gabbb :=compositeCell {_decb ,_ggfef };if _cecg {_af .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",_caga ,_agff ,_gabbb .String ());
};_gabbb .updateBBox ();_fdcc ._eagdf [_dddg (_caga ,_agff )]=_gabbb ;};func (_egcbd *textPara )isAtom ()*textTable {_bafc :=_egcbd ;_bcfc :=_egcbd ._aged ;_aefa :=_egcbd ._fcbc ;if !(_bcfc !=nil &&!_bcfc ._fbdf &&_aefa !=nil &&!_aefa ._fbdf ){return nil ;
};_cabga :=_bcfc ._fcbc ;if !(_cabga !=nil &&!_cabga ._fbdf &&_cabga ==_aefa ._aged ){return nil ;};return _cfcaa (_bafc ,_bcfc ,_aefa ,_cabga );};func (_fegf paraList )computeEBBoxes (){if _egcc {_db .Log .Info ("\u0063o\u006dp\u0075\u0074\u0065\u0045\u0042\u0042\u006f\u0078\u0065\u0073\u003a");
};for _ ,_cfad :=range _fegf {_cfad ._afae =_cfad .PdfRectangle ;};_afag :=_fegf .yNeighbours (0);for _gffd ,_faaf :=range _fegf {_gafg :=_faaf ._afae ;_ccac ,_bgaf :=-1.0e9,+1.0e9;for _ ,_aecbg :=range _afag [_faaf ]{_gcbf :=_fegf [_aecbg ]._afae ;if _gcbf .Urx < _gafg .Llx {_ccac =_ec .Max (_ccac ,_gcbf .Urx );
}else if _gafg .Urx < _gcbf .Llx {_bgaf =_ec .Min (_bgaf ,_gcbf .Llx );};};for _accc ,_gcgca :=range _fegf {_dgfe :=_gcgca ._afae ;if _gffd ==_accc ||_dgfe .Ury > _gafg .Lly {continue ;};if _ccac <=_dgfe .Llx &&_dgfe .Llx < _gafg .Llx {_gafg .Llx =_dgfe .Llx ;
}else if _dgfe .Urx <=_bgaf &&_gafg .Urx < _dgfe .Urx {_gafg .Urx =_dgfe .Urx ;};};if _egcc {_af .Printf ("\u0025\u0034\u0064\u003a %\u0036\u002e\u0032\u0066\u2192\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0071\u000a",_gffd ,_faaf ._afae ,_gafg ,_baeb (_faaf .text (),50));
};_faaf ._afae =_gafg ;};if _fgec {for _ ,_gbece :=range _fegf {_gbece .PdfRectangle =_gbece ._afae ;};};};const _ege =20;func (_ccfe *textTable )getDown ()paraList {_aacc :=make (paraList ,_ccfe ._cecgg );for _fgggd :=0;_fgggd < _ccfe ._cecgg ;_fgggd ++{_bbdcg :=_ccfe .get (_fgggd ,_ccfe ._baffe -1)._fcbc ;
if _bbdcg ==nil ||_bbdcg ._fbdf {return nil ;};_aacc [_fgggd ]=_bbdcg ;};for _gggg :=0;_gggg < _ccfe ._cecgg -1;_gggg ++{if _aacc [_gggg ]._aged !=_aacc [_gggg +1]{return nil ;};};return _aacc ;};type textTable struct{_gf .PdfRectangle ;_cecgg ,_baffe int ;
_egabb bool ;_bfdd map[uint64 ]*textPara ;_eagdf map[uint64 ]compositeCell ;};func (_fefb *subpath )add (_baef ..._ae .Point ){_fefb ._ecc =append (_fefb ._ecc ,_baef ...)};func (_aeaa *ruling )encloses (_caaf ,_dcebf float64 )bool {return _aeaa ._bbgb -_gcgc <=_caaf &&_dcebf <=_aeaa ._daed +_gcgc ;
};func (_fffd rulingList )primMinMax ()(float64 ,float64 ){_bbgf ,_daad :=_fffd [0]._adee ,_fffd [0]._adee ;for _ ,_acdg :=range _fffd [1:]{if _acdg ._adee < _bbgf {_bbgf =_acdg ._adee ;}else if _acdg ._adee > _daad {_daad =_acdg ._adee ;};};return _bbgf ,_daad ;
};
// String returns a human readable description of `vecs`.
func (_ecaf rulingList )String ()string {if len (_ecaf )==0{return "\u007b \u0045\u004d\u0050\u0054\u0059\u0020}";};_bdfgg ,_gabba :=_ecaf .vertsHorzs ();_bcba :=len (_bdfgg );_eefcg :=len (_gabba );if _bcba ==0||_eefcg ==0{return _af .Sprintf ("\u007b%\u0064\u0020\u0078\u0020\u0025\u0064}",_bcba ,_eefcg );
};_cfeg :=_gf .PdfRectangle {Llx :_bdfgg [0]._adee ,Urx :_bdfgg [_bcba -1]._adee ,Lly :_gabba [_eefcg -1]._adee ,Ury :_gabba [0]._adee };return _af .Sprintf ("\u007b\u0025d\u0020\u0078\u0020%\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u007d",_bcba ,_eefcg ,_cfeg );
};
// String returns a description of `k`.
func (_bgaaa rulingKind )String ()string {_aacff ,_acgc :=_egbde [_bgaaa ];if !_acgc {return _af .Sprintf ("\u004e\u006ft\u0020\u0061\u0020r\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0064",_bgaaa );};return _aacff ;};func (_fdc *wordBag )highestWord (_dcge int ,_bged ,_edee float64 )*textWord {for _ ,_gfda :=range _fdc ._gceg [_dcge ]{if _bged <=_gfda ._fecd &&_gfda ._fecd <=_edee {return _gfda ;
};};return nil ;};func _dae (_gddf _ae .Point )_ae .Matrix {return _ae .TranslationMatrix (_gddf .X ,_gddf .Y )};func (_aegd *ruling )gridIntersecting (_bgbac *ruling )bool {return _fddc (_aegd ._bbgb ,_bgbac ._bbgb )&&_fddc (_aegd ._daed ,_bgbac ._daed );
};func _gcaf (_egbf _gf .PdfRectangle ,_gcfb bounded )float64 {return _egbf .Ury -_gcfb .bbox ().Lly };func (_dfdc *textTable )getComposite (_dcebb ,_cddcc int )(paraList ,_gf .PdfRectangle ){_eccg ,_bdefg :=_dfdc ._eagdf [_dddg (_dcebb ,_cddcc )];if _cecg {_af .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",_dcebb ,_cddcc ,_eccg .String ());
};if !_bdefg {return nil ,_gf .PdfRectangle {};};return _eccg .parasBBox ();};type textObject struct{_aab *Extractor ;_fgg *_gf .PdfPageResources ;_caa _gb .GraphicsState ;_gfc *textState ;_egd *stateStack ;_abdc _ae .Matrix ;_ade _ae .Matrix ;_cdad []*textMark ;
_fgfd bool ;};func (_beea *wordBag )absorb (_fgad *wordBag ){_fafa :=_fgad .makeRemovals ();for _deg ,_cdeab :=range _fgad ._gceg {for _ ,_fcab :=range _cdeab {_beea .pullWord (_fcab ,_deg ,_fafa );};};_fgad .applyRemovals (_fafa );};func _dfec (_gaaa string )string {_becb :=[]rune (_gaaa );
return string (_becb [:len (_becb )-1])};
// String returns a string describing `ma`.
func (_bdf TextMarkArray )String ()string {_cbff :=len (_bdf ._ece );if _cbff ==0{return "\u0045\u004d\u0050T\u0059";};_cgg :=_bdf ._ece [0];_gcad :=_bdf ._ece [_cbff -1];return _af .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",_cbff ,_cgg ,_gcad );
};func _adaea (_dccca []TextMark ,_eafd *int ,_eged string )[]TextMark {_beca :=_agaf ;_beca .Text =_eged ;return _ddcg (_dccca ,_eafd ,_beca );};func (_dgag paraList )lines ()[]*textLine {var _aedbg []*textLine ;for _ ,_gdgg :=range _dgag {_aedbg =append (_aedbg ,_gdgg ._ccgcb ...);
};return _aedbg ;};func _ggacg (_cccd float64 )int {var _fabe int ;if _cccd >=0{_fabe =int (_cccd /_edfbd );}else {_fabe =int (_cccd /_edfbd )-1;};return _fabe ;};func (_fcafd compositeCell )hasLines (_faeg []*textLine )bool {for _dgff ,_gcge :=range _faeg {_ebbgb :=_eadg (_fcafd .PdfRectangle ,_gcge .PdfRectangle );
if _cecg {_af .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",_ebbgb ,_dgff ,len (_faeg ));_af .Printf ("\u0020\u0020\u0020\u0020 \u005e\u005e\u005e\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u003d\u0025s\u000a",_fcafd );
_af .Printf ("\u0020 \u0020 \u0020\u0020\u0020\u006c\u0069\u006e\u0065\u003d\u0025\u0073\u000a",_gcge );};if _ebbgb {return true ;};};return false ;};
// String returns a description of `tm`.
func (_gabd *textMark )String ()string {return _af .Sprintf ("\u0025\u002e\u0032f \u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\u0022\u0025\u0073\u0022",_gabd .PdfRectangle ,_gabd ._bbab ,_gabd ._ebce );};func (_bcfg *shapesState )cubicTo (_cbga ,_bbfa ,_fbae ,_cfag ,_bbgc ,_cae float64 ){if _abef {_db .Log .Info ("\u0063\u0075\u0062\u0069\u0063\u0054\u006f\u003a");
};_bcfg .addPoint (_bbgc ,_cae );};func (_beab *textWord )absorb (_bdefe *textWord ){_beab .PdfRectangle =_cffe (_beab .PdfRectangle ,_bdefe .PdfRectangle );_beab ._dbgad =append (_beab ._dbgad ,_bdefe ._dbgad ...);};func (_ceea *wordBag )empty (_bgfea int )bool {_ ,_aedg :=_ceea ._gceg [_bgfea ];
return !_aedg };func _dcdbb (_ddccb []pathSection )rulingList {_gfgf (_ddccb );if _aacf {_db .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 (_ddccb ));
};var _fcae rulingList ;for _ ,_fbgb :=range _ddccb {for _ ,_edgb :=range _fbgb ._gbdd {if len (_edgb ._ecc )< 2{continue ;};_aggb :=_edgb ._ecc [0];for _ ,_cgae :=range _edgb ._ecc [1:]{if _fded ,_fgdc :=_cagf (_aggb ,_cgae ,_fbgb .Color );_fgdc {_fcae =append (_fcae ,_fded );
};_aggb =_cgae ;};};};if _aacf {_db .Log .Info ("m\u0061\u006b\u0065\u0053tr\u006fk\u0065\u0052\u0075\u006c\u0069n\u0067\u0073\u003a\u0020\u0025\u0073",_fcae );};return _fcae ;};
// String returns a string describing the current state of the textState stack.
func (_gge *stateStack )String ()string {_bbd :=[]string {_af .Sprintf ("\u002d\u002d\u002d\u002d f\u006f\u006e\u0074\u0020\u0073\u0074\u0061\u0063\u006b\u003a\u0020\u0025\u0064",len (*_gge ))};for _bafa ,_beae :=range *_gge {_egg :="\u003c\u006e\u0069l\u003e";
if _beae !=nil {_egg =_beae .String ();};_bbd =append (_bbd ,_af .Sprintf ("\u0009\u0025\u0032\u0064\u003a\u0020\u0025\u0073",_bafa ,_egg ));};return _e .Join (_bbd ,"\u000a");};func (_ggfeg gridTile )complete ()bool {return _ggfeg .numBorders ()==4};
// Text returns the extracted page text.
func (_aecd PageText )Text ()string {return _aecd ._gece };func (_cbf *textObject )setFont (_bea string ,_ecgg float64 )error {if _cbf ==nil {return nil ;};_cbf ._gfc ._cbea =_ecgg ;_abga ,_fgf :=_cbf .getFont (_bea );if _fgf !=nil {return _fgf ;};_cbf ._gfc ._bff =_abga ;
if _cbf ._egd .empty (){_cbf ._egd .push (_cbf ._gfc );}else {_cbf ._egd .top ()._bff =_cbf ._gfc ._bff ;};return nil ;};
// String returns a description of `k`.
func (_cgaf markKind )String ()string {_becc ,_beec :=_deecb [_cgaf ];if !_beec {return _af .Sprintf ("\u004e\u006f\u0074\u0020\u0061\u0020\u006d\u0061\u0072k\u003a\u0020\u0025\u0064",_cgaf );};return _becc ;};func (_ccg *imageExtractContext )extractInlineImage (_ebb *_gb .ContentStreamInlineImage ,_fa _gb .GraphicsState ,_ea *_gf .PdfPageResources )error {_feg ,_fc :=_ebb .ToImage (_ea );
if _fc !=nil {return _fc ;};_ggb ,_fc :=_ebb .GetColorSpace (_ea );if _fc !=nil {return _fc ;};if _ggb ==nil {_ggb =_gf .NewPdfColorspaceDeviceGray ();};_ebbe ,_fc :=_ggb .ImageToRGB (*_feg );if _fc !=nil {return _fc ;};_bcc :=ImageMark {Image :&_ebbe ,Width :_fa .CTM .ScalingFactorX (),Height :_fa .CTM .ScalingFactorY (),Angle :_fa .CTM .Angle ()};
_bcc .X ,_bcc .Y =_fa .CTM .Translation ();_ccg ._dcb =append (_ccg ._dcb ,_bcc );_ccg ._bag ++;return nil ;};func _cfcaa (_ageed ,_cged ,_daeea ,_cfae *textPara )*textTable {_bcgg :=&textTable {_cecgg :2,_baffe :2,_bfdd :make (map[uint64 ]*textPara ,4)};
_bcgg .put (0,0,_ageed );_bcgg .put (1,0,_cged );_bcgg .put (0,1,_daeea );_bcgg .put (1,1,_cfae );return _bcgg ;};
// String returns a human readable description of `s`.
func (_cbab intSet )String ()string {var _gdebe []int ;for _gffc :=range _cbab {if _cbab .has (_gffc ){_gdebe =append (_gdebe ,_gffc );};};_ed .Ints (_gdebe );return _af .Sprintf ("\u0025\u002b\u0076",_gdebe );};func _cfegf (_fcga _gf .PdfRectangle ,_dega ,_dcff ,_edcd ,_ceca *ruling )gridTile {_ggde :=_fcga .Llx ;
_adfde :=_fcga .Urx ;_bedac :=_fcga .Lly ;_fdbd :=_fcga .Ury ;return gridTile {PdfRectangle :_fcga ,_gebef :_dega !=nil &&_dega .encloses (_bedac ,_fdbd ),_gbcae :_dcff !=nil &&_dcff .encloses (_bedac ,_fdbd ),_cfgb :_edcd !=nil &&_edcd .encloses (_ggde ,_adfde ),_abeaf :_ceca !=nil &&_ceca .encloses (_ggde ,_adfde )};
};func _ddcg (_eedbd []TextMark ,_bdfga *int ,_fcaf TextMark )[]TextMark {_fcaf .Offset =*_bdfga ;_eedbd =append (_eedbd ,_fcaf );*_bdfga +=len (_fcaf .Text );return _eedbd ;};func (_deedc *subpath )makeRectRuling (_cfadc _g .Color )(*ruling ,bool ){if _daeag {_db .Log .Info ("\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0070\u0061\u0074\u0068\u003d\u0025\u0076",_deedc );
};_fbdb :=_deedc ._ecc [:4];_ggef :=make (map[int ]rulingKind ,len (_fbdb ));for _egfgd ,_dafd :=range _fbdb {_edgfe :=_deedc ._ecc [(_egfgd +1)%4];_ggef [_egfgd ]=_ecba (_dafd ,_edgfe );if _daeag {_af .Printf ("\u0025\u0034\u0064: \u0025\u0073\u0020\u003d\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u002d\u0020\u0025\u0036\u002e\u0032\u0066",_egfgd ,_ggef [_egfgd ],_dafd ,_edgfe );
};};if _daeag {_af .Printf ("\u0020\u0020\u0020\u006b\u0069\u006e\u0064\u0073\u003d\u0025\u002b\u0076\u000a",_ggef );};var _dcgdb ,_abbc []int ;for _faece ,_cbcc :=range _ggef {switch _cbcc {case _egaad :_abbc =append (_abbc ,_faece );case _cbdb :_dcgdb =append (_dcgdb ,_faece );
};};if _daeag {_af .Printf ("\u0020\u0020 \u0068\u006f\u0072z\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_abbc ),_abbc );_af .Printf ("\u0020\u0020 \u0076\u0065\u0072t\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_dcgdb ),_dcgdb );
};_geba :=(len (_abbc )==2&&len (_dcgdb )==2)||(len (_abbc )==2&&len (_dcgdb )==0&&_cgegf (_fbdb [_abbc [0]],_fbdb [_abbc [1]]))||(len (_dcgdb )==2&&len (_abbc )==0&&_bgcec (_fbdb [_dcgdb [0]],_fbdb [_dcgdb [1]]));if _daeag {_af .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_abbc ),len (_dcgdb ),_geba );
};if !_geba {if _daeag {_db .Log .Error ("\u0021!\u006d\u0061\u006b\u0065R\u0065\u0063\u0074\u0052\u0075l\u0069n\u0067:\u0020\u0070\u0061\u0074\u0068\u003d\u0025v",_deedc );_af .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_abbc ),len (_dcgdb ),_geba );
};return &ruling {},false ;};if len (_dcgdb )==0{for _gfgc ,_ababc :=range _ggef {if _ababc !=_egaad {_dcgdb =append (_dcgdb ,_gfgc );};};};if len (_abbc )==0{for _gebg ,_dffcg :=range _ggef {if _dffcg !=_cbdb {_abbc =append (_abbc ,_gebg );};};};if _daeag {_db .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 (_abbc ),len (_dcgdb ),len (_fbdb ),_abbc ,_dcgdb ,_fbdb );
};var _bdaf ,_bacef ,_eafde ,_bfde _ae .Point ;if _fbdb [_abbc [0]].Y > _fbdb [_abbc [1]].Y {_eafde ,_bfde =_fbdb [_abbc [0]],_fbdb [_abbc [1]];}else {_eafde ,_bfde =_fbdb [_abbc [1]],_fbdb [_abbc [0]];};if _fbdb [_dcgdb [0]].X > _fbdb [_dcgdb [1]].X {_bdaf ,_bacef =_fbdb [_dcgdb [0]],_fbdb [_dcgdb [1]];
}else {_bdaf ,_bacef =_fbdb [_dcgdb [1]],_fbdb [_dcgdb [0]];};_abcg :=_gf .PdfRectangle {Llx :_bdaf .X ,Urx :_bacef .X ,Lly :_bfde .Y ,Ury :_eafde .Y };if _abcg .Llx > _abcg .Urx {_abcg .Llx ,_abcg .Urx =_abcg .Urx ,_abcg .Llx ;};if _abcg .Lly > _abcg .Ury {_abcg .Lly ,_abcg .Ury =_abcg .Ury ,_abcg .Lly ;
};_cgbg :=rectRuling {PdfRectangle :_abcg ,_cebdd :_geeb (_abcg ),Color :_cfadc };if _cgbg ._cebdd ==_cdcd {if _daeag {_db .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 ;};_caag ,_ffad :=_cgbg .asRuling ();if !_ffad {if _daeag {_db .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 _aacf {_af .Printf ("\u0020\u0020\u0020\u0072\u003d\u0025\u0073\u000a",_caag .String ());
};return _caag ,true ;};func _ggaef (_gcgcg map[float64 ]map[float64 ]gridTile )[]float64 {_faacg :=make ([]float64 ,0,len (_gcgcg ));for _abgd :=range _gcgcg {_faacg =append (_faacg ,_abgd );};_ed .Float64s (_faacg );_effbd :=len (_faacg );for _gfag :=0;
_gfag < _effbd /2;_gfag ++{_faacg [_gfag ],_faacg [_effbd -1-_gfag ]=_faacg [_effbd -1-_gfag ],_faacg [_gfag ];};return _faacg ;};func (_gacaf *textWord )bbox ()_gf .PdfRectangle {return _gacaf .PdfRectangle };func (_dfbb paraList )log (_dcggc string ){if !_egge {return ;
};_db .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",_dcggc ,len (_dfbb ));for _ccca ,_eggf :=range _dfbb {if _eggf ==nil {continue ;
};_ffaf :=_eggf .text ();_egaf :="\u0020\u0020";if _eggf ._gagb !=nil {_egaf =_af .Sprintf ("\u005b%\u0064\u0078\u0025\u0064\u005d",_eggf ._gagb ._cecgg ,_eggf ._gagb ._baffe );};_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0025s\u0020\u0025\u0071\u000a",_ccca ,_eggf .PdfRectangle ,_egaf ,_baeb (_ffaf ,50));
};};func (_efgg rulingList )augmentGrid ()(rulingList ,rulingList ){_agace ,_fcaeg :=_efgg .vertsHorzs ();if len (_agace )==0||len (_fcaeg )==0{return _agace ,_fcaeg ;};_bdfac ,_abce :=_agace ,_fcaeg ;_gdaa :=_agace .bbox ();_beff :=_fcaeg .bbox ();if _aacf {_db .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0056\u003d\u0025\u0036\u002e\u0032\u0066",_gdaa );
_db .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0048\u003d\u0025\u0036\u002e\u0032\u0066",_beff );};var _bbfc ,_efdf ,_ddabc ,_dgba *ruling ;if _beff .Llx < _gdaa .Llx -_gcgc {_bbfc =&ruling {_fgcfb :_abfb ,_ffag :_cbdb ,_adee :_beff .Llx ,_bbgb :_gdaa .Lly ,_daed :_gdaa .Ury };
_agace =append (rulingList {_bbfc },_agace ...);};if _beff .Urx > _gdaa .Urx +_gcgc {_efdf =&ruling {_fgcfb :_abfb ,_ffag :_cbdb ,_adee :_beff .Urx ,_bbgb :_gdaa .Lly ,_daed :_gdaa .Ury };_agace =append (_agace ,_efdf );};if _gdaa .Lly < _beff .Lly -_gcgc {_ddabc =&ruling {_fgcfb :_abfb ,_ffag :_egaad ,_adee :_gdaa .Lly ,_bbgb :_beff .Llx ,_daed :_beff .Urx };
_fcaeg =append (rulingList {_ddabc },_fcaeg ...);};if _gdaa .Ury > _beff .Ury +_gcgc {_dgba =&ruling {_fgcfb :_abfb ,_ffag :_egaad ,_adee :_gdaa .Ury ,_bbgb :_beff .Llx ,_daed :_beff .Urx };_fcaeg =append (_fcaeg ,_dgba );};if len (_agace )+len (_fcaeg )==len (_efgg ){return _bdfac ,_abce ;
};_ecbac :=append (_agace ,_fcaeg ...);_efgg .log ("u\u006e\u0061\u0075\u0067\u006d\u0065\u006e\u0074\u0065\u0064");_ecbac .log ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0065d");return _agace ,_fcaeg ;};const _dagg =10;func _dbfa (_eaca *wordBag ,_bggcd *textWord ,_adeb float64 )bool {return _bggcd .Llx < _eaca .Urx +_adeb &&_eaca .Llx -_adeb < _bggcd .Urx ;
};func (_defga paraList )findTableGrid (_bdcb gridTiling )(*textTable ,map[*textPara ]struct{}){_gbabgg :=len (_bdcb ._dadg );_fdbe :=len (_bdcb ._ebff );_fddf :=textTable {_egabb :true ,_cecgg :_gbabgg ,_baffe :_fdbe ,_bfdd :make (map[uint64 ]*textPara ,_gbabgg *_fdbe ),_eagdf :make (map[uint64 ]compositeCell ,_gbabgg *_fdbe )};
_ceaea :=make (map[*textPara ]struct{});_dacc :=int ((1.0-_bbcb )*float64 (_gbabgg *_fdbe ));_fcbcc :=0;if _bgca {_db .Log .Info ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0047\u0072\u0069\u0064\u003a\u0020\u0025\u0064\u0020\u0078\u0020%\u0064",_gbabgg ,_fdbe );
};for _dged ,_cedge :=range _bdcb ._ebff {_defd ,_gdfef :=_bdcb ._ggace [_cedge ];if !_gdfef {continue ;};for _fabd ,_aebge :=range _bdcb ._dadg {_eeecb ,_fegb :=_defd [_aebge ];if !_fegb {continue ;};_cecc :=_defga .inTile (_eeecb );if len (_cecc )==0{_fcbcc ++;
if _fcbcc > _dacc {if _bgca {_db .Log .Info ("\u0021\u006e\u0075m\u0045\u006d\u0070\u0074\u0079\u003d\u0025\u0064",_fcbcc );};return nil ,nil ;};}else {_fddf .putComposite (_fabd ,_dged ,_cecc ,_eeecb .PdfRectangle );for _ ,_agae :=range _cecc {_ceaea [_agae ]=struct{}{};
};};};};_ggcb :=0;for _aedbgc :=0;_aedbgc < _gbabgg ;_aedbgc ++{_gbaa :=_fddf .get (_aedbgc ,0);if _gbaa ==nil ||!_gbaa ._fbcfc {_ggcb ++;};};if _ggcb ==0{if _bgca {_db .Log .Info ("\u0021\u006e\u0075m\u0048\u0065\u0061\u0064\u0065\u0072\u003d\u0030");
};return nil ,nil ;};_dgaad :=_fddf .reduceTiling (_bdcb ,_ffc );_dgaad =_dgaad .subdivide ();return _dgaad ,_ceaea ;};type wordBag struct{_gf .PdfRectangle ;_agbd float64 ;_efbc ,_daa rulingList ;_efdc float64 ;_gceg map[int ][]*textWord ;};func _dccbc (_cggg []*textWord ,_cdgf *textWord )[]*textWord {for _efcbg ,_fbbdd :=range _cggg {if _fbbdd ==_cdgf {return _bfeaa (_cggg ,_efcbg );
};};_db .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",_cdgf );
return nil ;};func (_dbead paraList )addNeighbours (){_fcba :=func (_ebbea []int ,_dccde *textPara )([]*textPara ,[]*textPara ){_cfee :=make ([]*textPara ,0,len (_ebbea )-1);_gfee :=make ([]*textPara ,0,len (_ebbea )-1);for _ ,_gfcdd :=range _ebbea {_agbab :=_dbead [_gfcdd ];
if _agbab .Urx <=_dccde .Llx {_cfee =append (_cfee ,_agbab );}else if _agbab .Llx >=_dccde .Urx {_gfee =append (_gfee ,_agbab );};};return _cfee ,_gfee ;};_daeb :=func (_egabc []int ,_fcdf *textPara )([]*textPara ,[]*textPara ){_dabc :=make ([]*textPara ,0,len (_egabc )-1);
_afba :=make ([]*textPara ,0,len (_egabc )-1);for _ ,_aaeb :=range _egabc {_gdfge :=_dbead [_aaeb ];if _gdfge .Ury <=_fcdf .Lly {_afba =append (_afba ,_gdfge );}else if _gdfge .Lly >=_fcdf .Ury {_dabc =append (_dabc ,_gdfge );};};return _dabc ,_afba ;};
_geebc :=_dbead .yNeighbours (_cbfg );for _ ,_gfcce :=range _dbead {_dcbd :=_geebc [_gfcce ];if len (_dcbd )==0{continue ;};_dcdeg ,_aecdd :=_fcba (_dcbd ,_gfcce );if len (_dcdeg )==0&&len (_aecdd )==0{continue ;};if len (_dcdeg )> 0{_aefgb :=_dcdeg [0];
for _ ,_fbgd :=range _dcdeg [1:]{if _fbgd .Urx >=_aefgb .Urx {_aefgb =_fbgd ;};};for _ ,_aadcc :=range _dcdeg {if _aadcc !=_aefgb &&_aadcc .Urx > _aefgb .Llx {_aefgb =nil ;break ;};};if _aefgb !=nil &&_cfba (_gfcce .PdfRectangle ,_aefgb .PdfRectangle ){_gfcce ._cedd =_aefgb ;
};};if len (_aecdd )> 0{_acga :=_aecdd [0];for _ ,_bgdeb :=range _aecdd [1:]{if _bgdeb .Llx <=_acga .Llx {_acga =_bgdeb ;};};for _ ,_bbff :=range _aecdd {if _bbff !=_acga &&_bbff .Llx < _acga .Urx {_acga =nil ;break ;};};if _acga !=nil &&_cfba (_gfcce .PdfRectangle ,_acga .PdfRectangle ){_gfcce ._aged =_acga ;
};};};_geebc =_dbead .xNeighbours (_cacd );for _ ,_deaad :=range _dbead {_eecb :=_geebc [_deaad ];if len (_eecb )==0{continue ;};_dcceg ,_deee :=_daeb (_eecb ,_deaad );if len (_dcceg )==0&&len (_deee )==0{continue ;};if len (_deee )> 0{_dgfb :=_deee [0];
for _ ,_cgcfa :=range _deee [1:]{if _cgcfa .Ury >=_dgfb .Ury {_dgfb =_cgcfa ;};};for _ ,_dcade :=range _deee {if _dcade !=_dgfb &&_dcade .Ury > _dgfb .Lly {_dgfb =nil ;break ;};};if _dgfb !=nil &&_bdd (_deaad .PdfRectangle ,_dgfb .PdfRectangle ){_deaad ._fcbc =_dgfb ;
};};if len (_dcceg )> 0{_abagb :=_dcceg [0];for _ ,_dddf :=range _dcceg [1:]{if _dddf .Lly <=_abagb .Lly {_abagb =_dddf ;};};for _ ,_dbgc :=range _dcceg {if _dbgc !=_abagb &&_dbgc .Lly < _abagb .Ury {_abagb =nil ;break ;};};if _abagb !=nil &&_bdd (_deaad .PdfRectangle ,_abagb .PdfRectangle ){_deaad ._gabb =_abagb ;
};};};for _ ,_gacda :=range _dbead {if _gacda ._cedd !=nil &&_gacda ._cedd ._aged !=_gacda {_gacda ._cedd =nil ;};if _gacda ._gabb !=nil &&_gacda ._gabb ._fcbc !=_gacda {_gacda ._gabb =nil ;};if _gacda ._aged !=nil &&_gacda ._aged ._cedd !=_gacda {_gacda ._aged =nil ;
};if _gacda ._fcbc !=nil &&_gacda ._fcbc ._gabb !=_gacda {_gacda ._fcbc =nil ;};};};func (_gbae rectRuling )asRuling ()(*ruling ,bool ){_edfa :=ruling {_ffag :_gbae ._cebdd ,Color :_gbae .Color ,_fgcfb :_gbge };switch _gbae ._cebdd {case _cbdb :_edfa ._adee =0.5*(_gbae .Llx +_gbae .Urx );
_edfa ._bbgb =_gbae .Lly ;_edfa ._daed =_gbae .Ury ;_cgbce ,_aaff :=_gbae .checkWidth (_gbae .Llx ,_gbae .Urx );if !_aaff {if _daeag {_db .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",_gbae );
};return nil ,false ;};_edfa ._cggf =_cgbce ;case _egaad :_edfa ._adee =0.5*(_gbae .Lly +_gbae .Ury );_edfa ._bbgb =_gbae .Llx ;_edfa ._daed =_gbae .Urx ;_gcfbb ,_fedd :=_gbae .checkWidth (_gbae .Lly ,_gbae .Ury );if !_fedd {if _daeag {_db .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",_gbae );
};return nil ,false ;};_edfa ._cggf =_gcfbb ;default:_db .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_gbae ._cebdd );return nil ,false ;};return &_edfa ,true ;};func _gfgf (_cbcda []pathSection ){if _fece < 0.0{return ;
};if _aacf {_db .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 (_cbcda ));};for _badce ,_eccbd :=range _cbcda {for _fegcf ,_ebced :=range _eccbd ._gbdd {for _aaea ,_gged :=range _ebced ._ecc {_ebced ._ecc [_aaea ]=_ae .Point {X :_gfce (_gged .X ),Y :_gfce (_gged .Y )};
if _aacf {_bffde :=_ebced ._ecc [_aaea ];if !_fcedg (_gged ,_bffde ){_ddgd :=_ae .Point {X :_bffde .X -_gged .X ,Y :_bffde .Y -_gged .Y };_af .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",_badce ,_fegcf ,_aaea ,_gged ,_bffde ,_ddgd );
};};};};};};type cachedImage struct{_ga *_gf .Image ;_eed _gf .PdfColorspace ;};func (_dabd *wordBag )removeDuplicates (){if _bdgc {_db .Log .Info ("r\u0065m\u006f\u0076\u0065\u0044\u0075\u0070\u006c\u0069c\u0061\u0074\u0065\u0073: \u0025\u0071",_dabd .text ());
};for _ ,_gac :=range _dabd .depthIndexes (){if len (_dabd ._gceg [_gac ])==0{continue ;};_acegd :=_dabd ._gceg [_gac ][0];_bacf :=_fdbf *_acegd ._ceafb ;_bgef :=_acegd ._fecd ;for _ ,_ffccc :=range _dabd .depthBand (_bgef ,_bgef +_bacf ){_cgcb :=map[*textWord ]struct{}{};
_cgfb :=_dabd ._gceg [_ffccc ];for _ ,_edggb :=range _cgfb {if _ ,_efdcb :=_cgcb [_edggb ];_efdcb {continue ;};for _ ,_gfaf :=range _cgfb {if _ ,_gaca :=_cgcb [_gfaf ];_gaca {continue ;};if _gfaf !=_edggb &&_gfaf ._abceb ==_edggb ._abceb &&_ec .Abs (_gfaf .Llx -_edggb .Llx )< _bacf &&_ec .Abs (_gfaf .Urx -_edggb .Urx )< _bacf &&_ec .Abs (_gfaf .Lly -_edggb .Lly )< _bacf &&_ec .Abs (_gfaf .Ury -_edggb .Ury )< _bacf {_cgcb [_gfaf ]=struct{}{};
};};};if len (_cgcb )> 0{_dceb :=0;for _ ,_dgdf :=range _cgfb {if _ ,_gfcd :=_cgcb [_dgdf ];!_gfcd {_cgfb [_dceb ]=_dgdf ;_dceb ++;};};_dabd ._gceg [_ffccc ]=_cgfb [:len (_cgfb )-len (_cgcb )];if len (_dabd ._gceg [_ffccc ])==0{delete (_dabd ._gceg ,_ffccc );
};};};};};func (_dfge gridTile )numBorders ()int {_edgba :=0;if _dfge ._gebef {_edgba ++;};if _dfge ._gbcae {_edgba ++;};if _dfge ._cfgb {_edgba ++;};if _dfge ._abeaf {_edgba ++;};return _edgba ;};func (_edd *textObject )getFillColor ()_g .Color {return _fbgg (_edd ._caa .ColorspaceNonStroking ,_edd ._caa .ColorNonStroking );
};func _dfed (_afgb _gf .PdfRectangle )*ruling {return &ruling {_ffag :_egaad ,_adee :_afgb .Lly ,_bbgb :_afgb .Llx ,_daed :_afgb .Urx };};func (_fge *textObject )reset (){_fge ._abdc =_ae .IdentityMatrix ();_fge ._ade =_ae .IdentityMatrix ();_fge ._cdad =nil ;
};func (_ggca paraList )reorder (_dgc []int ){_fgeg :=make (paraList ,len (_ggca ));for _caee ,_eaeg :=range _dgc {_fgeg [_caee ]=_ggca [_eaeg ];};copy (_ggca ,_fgeg );};func (_cdb *shapesState )closePath (){if _cdb ._fag {_cdb ._bcd =append (_cdb ._bcd ,_bdfb (_cdb ._aeeg ));
_cdb ._fag =false ;}else if len (_cdb ._bcd )==0{if _abef {_db .Log .Debug ("\u0063\u006c\u006f\u0073eP\u0061\u0074\u0068\u0020\u0077\u0069\u0074\u0068\u0020\u006e\u006f\u0020\u0070\u0061t\u0068");};_cdb ._fag =false ;return ;};_cdb ._bcd [len (_cdb ._bcd )-1].close ();
if _abef {_db .Log .Info ("\u0063\u006c\u006f\u0073\u0065\u0050\u0061\u0074\u0068\u003a\u0020\u0025\u0073",_cdb );};};func (_cgdg *stateStack )push (_fabb *textState ){_bcad :=*_fabb ;*_cgdg =append (*_cgdg ,&_bcad )};func (_aabb *wordBag )depthBand (_fgaf ,_cgdb float64 )[]int {if len (_aabb ._gceg )==0{return nil ;
};return _aabb .depthRange (_aabb .getDepthIdx (_fgaf ),_aabb .getDepthIdx (_cgdb ));};func (_agccf intSet )del (_edca int ){delete (_agccf ,_edca )};
// Elements returns the TextMarks in `ma`.
func (_ggaa *TextMarkArray )Elements ()[]TextMark {return _ggaa ._ece };func (_dbfaf rulingList )splitSec ()[]rulingList {_ed .Slice (_dbfaf ,func (_cedg ,_bbgbd int )bool {_gbbaa ,_aggg :=_dbfaf [_cedg ],_dbfaf [_bbgbd ];if _gbbaa ._bbgb !=_aggg ._bbgb {return _gbbaa ._bbgb < _aggg ._bbgb ;
};return _gbbaa ._daed < _aggg ._daed ;});_bafg :=make (map[*ruling ]struct{},len (_dbfaf ));_bagag :=func (_dbfe *ruling )rulingList {_adea :=rulingList {_dbfe };_bafg [_dbfe ]=struct{}{};for _ ,_bgdge :=range _dbfaf {if _ ,_abcfe :=_bafg [_bgdge ];_abcfe {continue ;
};for _ ,_badc :=range _adea {if _bgdge .alignsSec (_badc ){_adea =append (_adea ,_bgdge );_bafg [_bgdge ]=struct{}{};break ;};};};return _adea ;};_dec :=[]rulingList {_bagag (_dbfaf [0])};for _ ,_febf :=range _dbfaf [1:]{if _ ,_fcfcb :=_bafg [_febf ];
_fcfcb {continue ;};_dec =append (_dec ,_bagag (_febf ));};return _dec ;};
// PageText represents the layout of text on a device page.
type PageText struct{_gefac []*textMark ;_gece string ;_bcf []TextMark ;_adbb []TextTable ;_bbbf _gf .PdfRectangle ;_faee []pathSection ;_faeea []pathSection ;};func (_cagb *textObject )moveTextSetLeading (_eabg ,_egad float64 ){_cagb ._gfc ._bceg =-_egad ;
_cagb .moveLP (_eabg ,_egad );};func _bgce (_fcag []*wordBag )[]*wordBag {if len (_fcag )<=1{return _fcag ;};if _effe {_db .Log .Info ("\u006d\u0065\u0072\u0067\u0065\u0057\u006f\u0072\u0064B\u0061\u0067\u0073\u003a");};_ed .Slice (_fcag ,func (_caed ,_bded int )bool {_fdcg ,_fed :=_fcag [_caed ],_fcag [_bded ];
_dbbc :=_fdcg .Width ()*_fdcg .Height ();_bffe :=_fed .Width ()*_fed .Height ();if _dbbc !=_bffe {return _dbbc > _bffe ;};if _fdcg .Height ()!=_fed .Height (){return _fdcg .Height ()> _fed .Height ();};return _caed < _bded ;});var _ecb []*wordBag ;_eagd :=make (intSet );
for _agbg :=0;_agbg < len (_fcag );_agbg ++{if _eagd .has (_agbg ){continue ;};_befg :=_fcag [_agbg ];for _bbfd :=_agbg +1;_bbfd < len (_fcag );_bbfd ++{if _eagd .has (_agbg ){continue ;};_ebabb :=_fcag [_bbfd ];_fddb :=_befg .PdfRectangle ;_fddb .Llx -=_befg ._agbd ;
if _acce (_fddb ,_ebabb .PdfRectangle ){_befg .absorb (_ebabb );_eagd .add (_bbfd );};};_ecb =append (_ecb ,_befg );};if len (_fcag )!=len (_ecb )+len (_eagd ){_db .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 (_fcag ),len (_ecb ),len (_eagd ));
};return _ecb ;};func (_aeae *textLine )appendWord (_geee *textWord ){_aeae ._egcb =append (_aeae ._egcb ,_geee );_aeae .PdfRectangle =_cffe (_aeae .PdfRectangle ,_geee .PdfRectangle );if _geee ._ceafb > _aeae ._dfaf {_aeae ._dfaf =_geee ._ceafb ;};if _geee ._fecd > _aeae ._dbbgg {_aeae ._dbbgg =_geee ._fecd ;
};};func (_dfdb paraList )writeText (_aggf _b .Writer ){for _ffcc ,_beda :=range _dfdb {if _beda ._fbcfc {continue ;};_beda .writeText (_aggf );if _ffcc !=len (_dfdb )-1{if _ebfd (_beda ,_dfdb [_ffcc +1]){_aggf .Write ([]byte ("\u0020"));}else {_aggf .Write ([]byte ("\u000a"));
_aggf .Write ([]byte ("\u000a"));};};};_aggf .Write ([]byte ("\u000a"));_aggf .Write ([]byte ("\u000a"));};func (_fgbdc gridTiling )complete ()bool {for _ ,_fdef :=range _fgbdc ._ggace {for _ ,_gegg :=range _fdef {if !_gegg .complete (){return false ;};
};};return true ;};
// String returns a description of `p`.
func (_aabc *textPara )String ()string {if _aabc ._fbcfc {return _af .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u005b\u0045\u004d\u0050\u0054\u0059\u005d",_aabc .PdfRectangle );};_gecg :="";if _aabc ._gagb !=nil {_gecg =_af .Sprintf ("\u005b\u0025\u0064\u0078\u0025\u0064\u005d\u0020",_aabc ._gagb ._cecgg ,_aabc ._gagb ._baffe );
};return _af .Sprintf ("\u0025\u0036\u002e\u0032f \u0025\u0073\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u0020\u0025\u0071",_aabc .PdfRectangle ,_gecg ,len (_aabc ._ccgcb ),_baeb (_aabc .text (),50));};func (_cced intSet )add (_deba int ){_cced [_deba ]=struct{}{}};
func _bacde (_eceb ,_ccaf bounded )float64 {_fbff :=_eebc (_eceb ,_ccaf );if !_fbfd (_fbff ){return _fbff ;};return _dad (_eceb ,_ccaf );};func (_efdb rulingList )mergePrimary ()float64 {_cfdce :=_efdb [0]._adee ;for _ ,_fcad :=range _efdb [1:]{_cfdce +=_fcad ._adee ;
};return _cfdce /float64 (len (_efdb ));};func _bdbd (_cbffa int ,_afbb map[int ][]float64 )([]int ,int ){_ecff :=make ([]int ,_cbffa );_agba :=0;for _bbcc :=0;_bbcc < _cbffa ;_bbcc ++{_ecff [_bbcc ]=_agba ;_agba +=len (_afbb [_bbcc ])+1;};return _ecff ,_agba ;
};func (_gae rulingList )sort (){_ed .Slice (_gae ,_gae .comp )};func _geeb (_baag _gf .PdfRectangle )rulingKind {_dgb :=_baag .Width ();_acbf :=_baag .Height ();if _dgb > _acbf {if _dgb >=_bfab {return _egaad ;};}else {if _acbf >=_bfab {return _cbdb ;
};};return _cdcd ;};type rulingList []*ruling ;func _bgcec (_ggefg ,_afed _ae .Point )bool {_gegf :=_ec .Abs (_ggefg .X -_afed .X );_fdad :=_ec .Abs (_ggefg .Y -_afed .Y );return _daae (_gegf ,_fdad );};func (_eca lineRuling )yMean ()float64 {return 0.5*(_eca ._gagbg .Y +_eca ._ggee .Y )};
func _fcedg (_bdbbd ,_agfe _ae .Point )bool {return _bdbbd .X ==_agfe .X &&_bdbbd .Y ==_agfe .Y };func _dad (_cafd ,_bdbb bounded )float64 {return _cafd .bbox ().Llx -_bdbb .bbox ().Llx };func _ccgcd (_ace *_gb .ContentStreamOperation )(float64 ,error ){if len (_ace .Params )!=1{_fdd :=_dd .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");
_db .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",_ace .Operand ,1,len (_ace .Params ),_ace .Params );
return 0.0,_fdd ;};return _gd .GetNumberAsFloat (_ace .Params [0]);};func (_bfaa *textTable )log (_ddee string ){if !_cecg {return ;};_db .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",_ddee ,_bfaa ._cecgg ,_bfaa ._baffe ,_bfaa ._egabb ,_bfaa .PdfRectangle );
for _babeg :=0;_babeg < _bfaa ._baffe ;_babeg ++{for _ggcf :=0;_ggcf < _bfaa ._cecgg ;_ggcf ++{_dcac :=_bfaa .get (_ggcf ,_babeg );if _dcac ==nil {continue ;};_af .Printf ("%\u0034\u0064\u0020\u00252d\u003a \u0025\u0036\u002e\u0032\u0066 \u0025\u0071\u0020\u0025\u0064\u000a",_ggcf ,_babeg ,_dcac .PdfRectangle ,_baeb (_dcac .text (),50),_a .RuneCountInString (_dcac .text ()));
};};};func (_dffd pathSection )bbox ()_gf .PdfRectangle {_edef :=_dffd ._gbdd [0]._ecc [0];_dagc :=_gf .PdfRectangle {Llx :_edef .X ,Urx :_edef .X ,Lly :_edef .Y ,Ury :_edef .Y };_gfdf :=func (_dacf _ae .Point ){if _dacf .X < _dagc .Llx {_dagc .Llx =_dacf .X ;
}else if _dacf .X > _dagc .Urx {_dagc .Urx =_dacf .X ;};if _dacf .Y < _dagc .Lly {_dagc .Lly =_dacf .Y ;}else if _dacf .Y > _dagc .Ury {_dagc .Ury =_dacf .Y ;};};for _ ,_gcb :=range _dffd ._gbdd [0]._ecc [1:]{_gfdf (_gcb );};for _ ,_ggfb :=range _dffd ._gbdd [1:]{for _ ,_ddad :=range _ggfb ._ecc {_gfdf (_ddad );
};};return _dagc ;};func _gfdd (_dafcf []int )[]int {_fcee :=make ([]int ,len (_dafcf ));for _cbgab ,_dbbga :=range _dafcf {_fcee [len (_dafcf )-1-_cbgab ]=_dbbga ;};return _fcee ;};func (_eegf *textLine )toTextMarks (_bbdc *int )[]TextMark {var _abab []TextMark ;
for _ ,_fcagb :=range _eegf ._egcb {if _fcagb ._bfad {_abab =_adaea (_abab ,_bbdc ,"\u0020");};_gdfa :=_fcagb .toTextMarks (_bbdc );_abab =append (_abab ,_gdfa ...);};return _abab ;};func (_dbad paraList )inTile (_cgdgbb gridTile )paraList {var _fddg paraList ;
for _ ,_cgbfb :=range _dbad {if _cgdgbb .contains (_cgbfb .PdfRectangle ){_fddg =append (_fddg ,_cgbfb );};};if _cecg {_af .Printf ("\u0020 \u0020\u0069\u006e\u0054i\u006c\u0065\u003a\u0020\u0020%\u0073 \u0069n\u0073\u0069\u0064\u0065\u003d\u0025\u0064\n",_cgdgbb ,len (_fddg ));
for _cddfb ,_dbda :=range _fddg {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cddfb ,_dbda );};_af .Println ("");};return _fddg ;};func (_agga paraList )llyRange (_degb []int ,_cfde ,_efgb float64 )[]int {_gadg :=len (_agga );if _efgb < _agga [_degb [0]].Lly ||_cfde > _agga [_degb [_gadg -1]].Lly {return nil ;
};_aedce :=_ed .Search (_gadg ,func (_cdbc int )bool {return _agga [_degb [_cdbc ]].Lly >=_cfde });_dgac :=_ed .Search (_gadg ,func (_dfda int )bool {return _agga [_degb [_dfda ]].Lly > _efgb });return _degb [_aedce :_dgac ];};func (_cede *subpath )clear (){*_cede =subpath {}};
func (_acgb *ruling )equals (_afbg *ruling )bool {return _acgb ._ffag ==_afbg ._ffag &&_fddc (_acgb ._adee ,_afbg ._adee )&&_fddc (_acgb ._bbgb ,_afbg ._bbgb )&&_fddc (_acgb ._daed ,_afbg ._daed );};func (_feee *textTable )getRight ()paraList {_acaad :=make (paraList ,_feee ._baffe );
for _aceb :=0;_aceb < _feee ._baffe ;_aceb ++{_gdfdd :=_feee .get (_feee ._cecgg -1,_aceb )._aged ;if _gdfdd ==nil ||_gdfdd ._fbdf {return nil ;};_acaad [_aceb ]=_gdfdd ;};for _cbbf :=0;_cbbf < _feee ._baffe -1;_cbbf ++{if _acaad [_cbbf ]._fcbc !=_acaad [_cbbf +1]{return nil ;
};};return _acaad ;};func (_ggae paraList )merge ()*textPara {_db .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 (_ggae ));
if len (_ggae )==0{return nil ;};_ggae .sortReadingOrder ();_cggbc :=_ggae [0].PdfRectangle ;_acef :=_ggae [0]._ccgcb ;for _ ,_fbe :=range _ggae [1:]{_cggbc =_cffe (_cggbc ,_fbe .PdfRectangle );_acef =append (_acef ,_fbe ._ccgcb ...);};return _deegg (_cggbc ,_acef );
};func (_bbec *textObject )newTextMark (_gcadd string ,_dead _ae .Matrix ,_eacc _ae .Point ,_cdaa float64 ,_aaaa *_gf .PdfFont ,_bdee float64 ,_debd ,_bdfg _g .Color )(textMark ,bool ){_fbcf :=_dead .Angle ();_fefed :=_ggge (_fbcf ,_dfff );var _efc float64 ;
if _fefed %180!=90{_efc =_dead .ScalingFactorY ();}else {_efc =_dead .ScalingFactorX ();};_abad :=_bagc (_dead );_egfgb :=_gf .PdfRectangle {Llx :_abad .X ,Lly :_abad .Y ,Urx :_eacc .X ,Ury :_eacc .Y };switch _fefed %360{case 90:_egfgb .Urx -=_efc ;case 180:_egfgb .Ury -=_efc ;
case 270:_egfgb .Urx +=_efc ;case 0:_egfgb .Ury +=_efc ;default:_fefed =0;_egfgb .Ury +=_efc ;};if _egfgb .Llx > _egfgb .Urx {_egfgb .Llx ,_egfgb .Urx =_egfgb .Urx ,_egfgb .Llx ;};if _egfgb .Lly > _egfgb .Ury {_egfgb .Lly ,_egfgb .Ury =_egfgb .Ury ,_egfgb .Lly ;
};_ged ,_aecb :=_cgde (_egfgb ,_bbec ._aab ._edc );if !_aecb {_db .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",_egfgb ,_bbec ._aab ._edc ,_gcadd );
};_egfgb =_ged ;_dfbg :=_egfgb ;_ffed :=_bbec ._aab ._edc ;switch _fefed %360{case 90:_ffed .Urx ,_ffed .Ury =_ffed .Ury ,_ffed .Urx ;_dfbg =_gf .PdfRectangle {Llx :_ffed .Urx -_egfgb .Ury ,Urx :_ffed .Urx -_egfgb .Lly ,Lly :_egfgb .Llx ,Ury :_egfgb .Urx };
case 180:_dfbg =_gf .PdfRectangle {Llx :_ffed .Urx -_egfgb .Llx ,Urx :_ffed .Urx -_egfgb .Urx ,Lly :_ffed .Ury -_egfgb .Lly ,Ury :_ffed .Ury -_egfgb .Ury };case 270:_ffed .Urx ,_ffed .Ury =_ffed .Ury ,_ffed .Urx ;_dfbg =_gf .PdfRectangle {Llx :_egfgb .Ury ,Urx :_egfgb .Lly ,Lly :_ffed .Ury -_egfgb .Llx ,Ury :_ffed .Ury -_egfgb .Urx };
};if _dfbg .Llx > _dfbg .Urx {_dfbg .Llx ,_dfbg .Urx =_dfbg .Urx ,_dfbg .Llx ;};if _dfbg .Lly > _dfbg .Ury {_dfbg .Lly ,_dfbg .Ury =_dfbg .Ury ,_dfbg .Lly ;};_ccf :=textMark {_ebce :_gcadd ,PdfRectangle :_dfbg ,_deb :_egfgb ,_cagg :_aaaa ,_bbab :_efc ,_abcb :_bdee ,_ebfa :_dead ,_facg :_eacc ,_bcbg :_fefed ,_eeac :_debd ,_dbbcb :_bdfg };
if _dcgd {_db .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",_abad ,_eacc ,_ccf .String ());};return _ccf ,_aecb ;
};func (_baga *textMark )inDiacriticArea (_dbfg *textMark )bool {_eebcd :=_baga .Llx -_dbfg .Llx ;_fagf :=_baga .Urx -_dbfg .Urx ;_deec :=_baga .Lly -_dbfg .Lly ;return _ec .Abs (_eebcd +_fagf )< _baga .Width ()*_ceef &&_ec .Abs (_deec )< _baga .Height ()*_ceef ;
};func (_fgb *textObject )setTextMatrix (_becd []float64 ){if len (_becd )!=6{_db .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u006c\u0065\u006e\u0028\u0066\u0029\u0020\u0021\u003d\u0020\u0036\u0020\u0028\u0025\u0064\u0029",len (_becd ));return ;};_dee ,_gdd ,_gea ,_cee ,_faac ,_gegb :=_becd [0],_becd [1],_becd [2],_becd [3],_becd [4],_becd [5];
_fgb ._abdc =_ae .NewMatrix (_dee ,_gdd ,_gea ,_cee ,_faac ,_gegb );_fgb ._ade =_fgb ._abdc ;};func (_bage *wordBag )maxDepth ()float64 {return _bage ._efdc -_bage .Lly };func (_dbbggf *textTable )toTextTable ()TextTable {if _cecg {_db .Log .Info ("t\u006fT\u0065\u0078\u0074\u0054\u0061\u0062\u006c\u0065:\u0020\u0025\u0064\u0020x \u0025\u0064",_dbbggf ._cecgg ,_dbbggf ._baffe );
};_dffg :=make ([][]TableCell ,_dbbggf ._baffe );for _defa :=0;_defa < _dbbggf ._baffe ;_defa ++{_dffg [_defa ]=make ([]TableCell ,_dbbggf ._cecgg );for _dbgec :=0;_dbgec < _dbbggf ._cecgg ;_dbgec ++{_bbaba :=_dbbggf .get (_dbgec ,_defa );if _bbaba ==nil {continue ;
};if _cecg {_af .Printf ("\u0025\u0034\u0064 \u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_dbgec ,_defa ,_bbaba );};_dffg [_defa ][_dbgec ].Text =_bbaba .text ();_eecf :=0;_dffg [_defa ][_dbgec ].Marks ._ece =_bbaba .toTextMarks (&_eecf );};};return TextTable {W :_dbbggf ._cecgg ,H :_dbbggf ._baffe ,Cells :_dffg };
};var _egbde =map[rulingKind ]string {_cdcd :"\u006e\u006f\u006e\u0065",_egaad :"\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_cbdb :"\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c"};func (_ggf *textObject )getFontDict (_gbc string )(_aece _gd .PdfObject ,_afdd error ){_cgc :=_ggf ._fgg ;
if _cgc ==nil {_db .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",_gbc );return nil ,nil ;};_aece ,_bdfa :=_cgc .GetFontByName (_gd .PdfObjectName (_gbc ));
if !_bdfa {_db .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",_gbc );
return nil ,_dd .New ("f\u006f\u006e\u0074\u0020no\u0074 \u0069\u006e\u0020\u0072\u0065s\u006f\u0075\u0072\u0063\u0065\u0073");};return _aece ,nil ;};func (_gdad rulingList )snapToGroups ()rulingList {_dbea ,_fdgc :=_gdad .vertsHorzs ();if len (_dbea )> 0{_dbea =_dbea .snapToGroupsDirection ();
};if len (_fdgc )> 0{_fdgc =_fdgc .snapToGroupsDirection ();};_afagc :=append (_dbea ,_fdgc ...);_afagc .log ("\u0073\u006e\u0061p\u0054\u006f\u0047\u0072\u006f\u0075\u0070\u0073");return _afagc ;};type intSet map[int ]struct{};func _bcgd (_dafba []compositeCell )[]float64 {var _gbfa []*textLine ;
_cdab :=0;for _ ,_aage :=range _dafba {_cdab +=len (_aage .paraList );_gbfa =append (_gbfa ,_aage .lines ()...);};_ed .Slice (_gbfa ,func (_dbcab ,_addce int )bool {_fdge ,_eedc :=_gbfa [_dbcab ],_gbfa [_addce ];_geaaa ,_fcbb :=_fdge ._dbbgg ,_eedc ._dbbgg ;
if !_fbfd (_geaaa -_fcbb ){return _geaaa < _fcbb ;};return _fdge .Llx < _eedc .Llx ;});if _cecg {_af .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",_cdab ,len (_gbfa ));
for _ecca ,_ebad :=range _gbfa {_af .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_ecca ,_ebad );};};var _aabg []float64 ;_gfab :=_gbfa [0];var _adaee [][]*textLine ;_agca :=[]*textLine {_gfab };for _afeg ,_agfg :=range _gbfa [1:]{if _agfg .Ury < _gfab .Lly {_fbag :=0.5*(_agfg .Ury +_gfab .Lly );
if _cecg {_af .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",_afeg ,_agfg .Ury ,_gfab .Lly ,_fbag ,_gfab ,_agfg );
};_aabg =append (_aabg ,_fbag );_adaee =append (_adaee ,_agca );_agca =nil ;};_agca =append (_agca ,_agfg );if _agfg .Lly < _gfab .Lly {_gfab =_agfg ;};};if len (_agca )> 0{_adaee =append (_adaee ,_agca );};if _cecg {_af .Printf (" \u0020\u0020\u0020\u0020\u0020\u0020 \u0072\u006f\u0077\u0043\u006f\u0072\u0072\u0069\u0064o\u0072\u0073\u003d%\u0036.\u0032\u0066\u000a",_aabg );
};if _cecg {_db .Log .Info ("\u0072\u006f\u0077\u003d\u0025\u0064",len (_dafba ));for _gceec ,_cdcde :=range _dafba {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gceec ,_cdcde );};_db .Log .Info ("\u0067r\u006f\u0075\u0070\u0073\u003d\u0025d",len (_adaee ));
for _gdbf ,_gadff :=range _adaee {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0064\u000a",_gdbf ,len (_gadff ));for _egcf ,_gabf :=range _gadff {_af .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_egcf ,_gabf );};};};_febe :=true ;
for _egedg ,_ecbf :=range _adaee {_bdaff :=true ;for _ggcab ,_bdff :=range _dafba {if _cecg {_af .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",_egedg ,len (_adaee ),_ggcab ,len (_dafba ),_bdff );
};if !_bdff .hasLines (_ecbf ){if _cecg {_af .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",_egedg ,len (_adaee ),_ggcab ,len (_dafba ));
};_bdaff =false ;break ;};};if !_bdaff {_febe =false ;break ;};};if !_febe {if _cecg {_db .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");
};_aabg =nil ;};if _cecg &&_aabg !=nil {_af .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",_aabg );};return _aabg ;};
// String returns a human readable description of `path`.
func (_aafe *subpath )String ()string {_cegb :=_aafe ._ecc ;_acfe :=len (_cegb );if _acfe <=5{return _af .Sprintf ("\u0025d\u003a\u0020\u0025\u0036\u002e\u0032f",_acfe ,_cegb );};return _af .Sprintf ("\u0025d\u003a\u0020\u0025\u0036.\u0032\u0066\u0020\u0025\u0036.\u0032f\u0020.\u002e\u002e\u0020\u0025\u0036\u002e\u0032f",_acfe ,_cegb [0],_cegb [1],_cegb [_acfe -1]);
};func (_dff *stateStack )pop ()*textState {if _dff .empty (){return nil ;};_bggc :=*(*_dff )[len (*_dff )-1];*_dff =(*_dff )[:len (*_dff )-1];return &_bggc ;};func (_cgege *textTable )subdivide ()*textTable {_cgege .logComposite ("\u0073u\u0062\u0064\u0069\u0076\u0069\u0064e");
_aebgb :=_cgege .compositeRowCorridors ();_fbad :=_cgege .compositeColCorridors ();if _cecg {_db .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",_cfcc (_aebgb ),_cfcc (_fbad ));
};if len (_aebgb )==0||len (_fbad )==0{return _cgege ;};_gbfgb (_aebgb );_gbfgb (_fbad );if _cecg {_db .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",_cfcc (_aebgb ),_cfcc (_fbad ));
};_eacbe ,_beef :=_bdbd (_cgege ._baffe ,_aebgb );_gbcb ,_aagb :=_bdbd (_cgege ._cecgg ,_fbad );_bcaa :=make (map[uint64 ]*textPara ,_aagb *_beef );_gffdg :=&textTable {PdfRectangle :_cgege .PdfRectangle ,_egabb :_cgege ._egabb ,_baffe :_beef ,_cecgg :_aagb ,_bfdd :_bcaa };
if _cecg {_db .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",_cgege ._cecgg ,_cgege ._baffe ,_aagb ,_beef ,_cfcc (_aebgb ),_cfcc (_fbad ),_eacbe ,_gbcb );
};for _ffea :=0;_ffea < _cgege ._baffe ;_ffea ++{_ecdf :=_eacbe [_ffea ];for _abaddd :=0;_abaddd < _cgege ._cecgg ;_abaddd ++{_cbgbg :=_gbcb [_abaddd ];if _cecg {_af .Printf ("\u0025\u0036\u0064\u002c %\u0032\u0064\u003a\u0020\u0078\u0030\u003d\u0025\u0064\u0020\u0079\u0030\u003d\u0025d\u000a",_abaddd ,_ffea ,_cbgbg ,_ecdf );
};_geaaga ,_cccdg :=_cgege ._eagdf [_dddg (_abaddd ,_ffea )];if !_cccdg {continue ;};_aegb :=_geaaga .split (_aebgb [_ffea ],_fbad [_abaddd ]);for _afgeg :=0;_afgeg < _aegb ._baffe ;_afgeg ++{for _eaag :=0;_eaag < _aegb ._cecgg ;_eaag ++{_bgccc :=_aegb .get (_eaag ,_afgeg );
_gffdg .put (_cbgbg +_eaag ,_ecdf +_afgeg ,_bgccc );if _cecg {_af .Printf ("\u0025\u0038\u0064\u002c\u0020\u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_cbgbg +_eaag ,_ecdf +_afgeg ,_bgccc );};};};};};return _gffdg ;};func _def (_gbfe ,_abgb bounded )float64 {_fec :=_dad (_gbfe ,_abgb );
if !_fbfd (_fec ){return _fec ;};return _eebc (_gbfe ,_abgb );};const (_fddad =true ;_ccgd =true ;_caeg =true ;_fgec =false ;_fefea =false ;_afdc =6;_fcbg =3.0;_eaab =200;_bebg =true ;_edfb =true ;_eceg =true ;_ceeg =true ;_edab =false ;);type pathSection struct{_gbdd []*subpath ;
_g .Color ;};func (_ecef *wordBag )getDepthIdx (_gff float64 )int {_cgfa :=_ecef .depthIndexes ();_eefb :=_ggacg (_gff );if _eefb < _cgfa [0]{return _cgfa [0];};if _eefb > _cgfa [len (_cgfa )-1]{return _cgfa [len (_cgfa )-1];};return _eefb ;};
// ImageMark represents an image drawn on a page and its position in device coordinates.
// All coordinates are in device coordinates.
type ImageMark struct{Image *_gf .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 (_daee rulingList )intersections ()map[int ]intSet {var _afeb ,_cgfab []int ;for _bgfgad ,_ecde :=range _daee {switch _ecde ._ffag {case _cbdb :_afeb =append (_afeb ,_bgfgad );case _egaad :_cgfab =append (_cgfab ,_bgfgad );};};if len (_afeb )< _cgbc +1||len (_cgfab )< _cbec +1{return nil ;
};if len (_afeb )+len (_cgfab )> _gdef {_db .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 (_daee ),len (_afeb ),len (_cgfab ));
return nil ;};_gcceb :=make (map[int ]intSet ,len (_afeb )+len (_cgfab ));for _ ,_gdfe :=range _afeb {for _ ,_dcfgg :=range _cgfab {if _daee [_gdfe ].intersects (_daee [_dcfgg ]){if _ ,_gbgg :=_gcceb [_gdfe ];!_gbgg {_gcceb [_gdfe ]=make (intSet );};if _ ,_dcee :=_gcceb [_dcfgg ];
!_dcee {_gcceb [_dcfgg ]=make (intSet );};_gcceb [_gdfe ].add (_dcfgg );_gcceb [_dcfgg ].add (_gdfe );};};};return _gcceb ;};func (_eec *wordBag )applyRemovals (_gafd map[int ]map[*textWord ]struct{}){for _cfdc ,_ebf :=range _gafd {if len (_ebf )==0{continue ;
};_bfcd :=_eec ._gceg [_cfdc ];_bdfaf :=len (_bfcd )-len (_ebf );if _bdfaf ==0{delete (_eec ._gceg ,_cfdc );continue ;};_dbed :=make ([]*textWord ,_bdfaf );_agfd :=0;for _ ,_ccebf :=range _bfcd {if _ ,_bedb :=_ebf [_ccebf ];!_bedb {_dbed [_agfd ]=_ccebf ;
_agfd ++;};};_eec ._gceg [_cfdc ]=_dbed ;};};func (_bbdfe rulingList )comp (_eagf ,_cecef int )bool {_dbca ,_cddf :=_bbdfe [_eagf ],_bbdfe [_cecef ];_ebeeb ,_gbcc :=_dbca ._ffag ,_cddf ._ffag ;if _ebeeb !=_gbcc {return _ebeeb > _gbcc ;};if _ebeeb ==_cdcd {return false ;
};_gafa :=func (_ecec bool )bool {if _ebeeb ==_egaad {return _ecec ;};return !_ecec ;};_fcfb ,_fdeec :=_dbca ._adee ,_cddf ._adee ;if _fcfb !=_fdeec {return _gafa (_fcfb > _fdeec );};_fcfb ,_fdeec =_dbca ._bbgb ,_cddf ._bbgb ;if _fcfb !=_fdeec {return _gafa (_fcfb < _fdeec );
};return _gafa (_dbca ._daed < _cddf ._daed );};
// NewFromContents creates a new extractor from contents and page resources.
func NewFromContents (contents string ,resources *_gf .PdfPageResources )(*Extractor ,error ){const _bb ="\u0065x\u0074\u0072\u0061\u0063t\u006f\u0072\u002e\u004e\u0065w\u0046r\u006fm\u0043\u006f\u006e\u0074\u0065\u006e\u0074s";_afg :=&Extractor {_dc :contents ,_eg :resources ,_ebg :map[string ]fontEntry {},_aeb :map[string ]textResult {}};
_bf .TrackUse (_bb );return _afg ,nil ;};func (_ddca *shapesState )addPoint (_bfc ,_ccgb float64 ){_bee :=_ddca .establishSubpath ();_bacd :=_ddca .devicePoint (_bfc ,_ccgb );if _bee ==nil {_ddca ._fag =true ;_ddca ._aeeg =_bacd ;}else {_bee .add (_bacd );
};};func (_cbed *textObject )getFont (_ddf string )(*_gf .PdfFont ,error ){if _cbed ._aab ._ebg !=nil {_cbed ._aab ._f ++;_ddb ,_eabgf :=_cbed ._aab ._ebg [_ddf ];if _eabgf {_ddb ._aabf =_cbed ._aab ._f ;return _ddb ._cgdgd ,nil ;};};_cbbe ,_cdfb :=_cbed .getFontDirect (_ddf );
if _cdfb !=nil {return nil ,_cdfb ;};if _cbed ._aab ._ebg !=nil {_gagc :=fontEntry {_cbbe ,_cbed ._aab ._f };if len (_cbed ._aab ._ebg )>=_dagg {var _dag []string ;for _egfb :=range _cbed ._aab ._ebg {_dag =append (_dag ,_egfb );};_ed .Slice (_dag ,func (_fca ,_dggd int )bool {return _cbed ._aab ._ebg [_dag [_fca ]]._aabf < _cbed ._aab ._ebg [_dag [_dggd ]]._aabf ;
});delete (_cbed ._aab ._ebg ,_dag [0]);};_cbed ._aab ._ebg [_ddf ]=_gagc ;};return _cbbe ,nil ;};func (_cac *shapesState )stroke (_eaa *[]pathSection ){_abda :=pathSection {_gbdd :_cac ._bcd ,Color :_cac ._bdb .getStrokeColor ()};*_eaa =append (*_eaa ,_abda );
if _aacf {_af .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 (*_eaa ),_cac ,_cac ._bdb .getStrokeColor (),_abda .bbox ());
if _abeb {for _dfca ,_dfe :=range _cac ._bcd {_af .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_dfca ,_dfe );if _dfca ==10{break ;};};};};};var (_bbgbg =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 (_abddg *textTable )bbox ()_gf .PdfRectangle {return _abddg .PdfRectangle };func (_addg rulingList )log (_afcb string ){if !_aacf {return ;};_db .Log .Info ("\u0023\u0023\u0023\u0020\u0025\u0031\u0030\u0073\u003a\u0020\u0076\u0065c\u0073\u003d\u0025\u0073",_afcb ,_addg .String ());
for _eeaf ,_dbdcd :=range _addg {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_eeaf ,_dbdcd .String ());};};func _ggge (_adg float64 ,_ceadb int )int {if _ceadb ==0{_ceadb =1;};_ebgce :=float64 (_ceadb );return int (_ec .Round (_adg /_ebgce )*_ebgce );
};func (_eece *textPara )text ()string {_fgbd :=new (_cc .Buffer );_eece .writeText (_fgbd );return _fgbd .String ();};func _gbfgb (_bggaf map[int ][]float64 ){if len (_bggaf )<=1{return ;};_cageg :=_cacc (_bggaf );if _cecg {_db .Log .Info ("\u0066i\u0078C\u0065\u006c\u006c\u0073\u003a \u006b\u0065y\u0073\u003d\u0025\u002b\u0076",_cageg );
};var _dccd ,_ggaf int ;for _dccd ,_ggaf =range _cageg {if _bggaf [_ggaf ]!=nil {break ;};};for _eadb ,_fcafb :=range _cageg [_dccd :]{_dabdg :=_bggaf [_fcafb ];if _dabdg ==nil {continue ;};if _cecg {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u006b\u0030\u003d\u0025\u0064\u0020\u006b1\u003d\u0025\u0064\u000a",_dccd +_eadb ,_ggaf ,_fcafb );
};_ddag :=_bggaf [_fcafb ];if _ddag [len (_ddag )-1]> _dabdg [0]{_ddag [len (_ddag )-1]=_dabdg [0];_bggaf [_ggaf ]=_ddag ;};_ggaf =_fcafb ;};};func (_abd *textObject )showText (_acc []byte )error {return _abd .renderText (_acc )};func _abea (_faec *wordBag ,_gebe *textWord ,_dcbe float64 )bool {return _faec .Urx <=_gebe .Llx &&_gebe .Llx < _faec .Urx +_dcbe ;
};func (_dffc *textLine )endsInHyphen ()bool {_ceaf :=_dffc ._egcb [len (_dffc ._egcb )-1];_egee :=_ceaf ._abceb ;_ffa ,_afa :=_a .DecodeLastRuneInString (_egee );if _afa <=0||!_bc .Is (_bc .Hyphen ,_ffa ){return false ;};if _ceaf ._bfad &&_cfdf (_egee ){return true ;
};return _cfdf (_dffc .text ());};func (_efgbf intSet )has (_gagaee int )bool {_ ,_ggbe :=_efgbf [_gagaee ];return _ggbe };func (_afbdb *textTable )get (_fegfd ,_ecdg int )*textPara {return _afbdb ._bfdd [_dddg (_fegfd ,_ecdg )]};func _ddeg (_dgdgb ,_gbeb int )int {if _dgdgb > _gbeb {return _dgdgb ;
};return _gbeb ;};
// 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 _gf .PdfRectangle ;
// Font is the font the text was drawn with.
Font *_gf .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 (_gebge *textTable )reduceTiling (_gddd gridTiling ,_bcag float64 )*textTable {_ccdge :=make ([]int ,0,_gebge ._baffe );_dbaa :=make ([]int ,0,_gebge ._cecgg );_dfad :=_gddd ._dadg ;_cccdf :=_gddd ._ebff ;for _dcad :=0;_dcad < _gebge ._baffe ;
_dcad ++{_efcbf :=_dcad > 0&&_ec .Abs (_cccdf [_dcad -1]-_cccdf [_dcad ])< _bcag &&_gebge .emptyRow (_dcad );if !_efcbf {_ccdge =append (_ccdge ,_dcad );};};for _adgb :=0;_adgb < _gebge ._cecgg ;_adgb ++{_cgagb :=_adgb < _gebge ._cecgg -1&&_ec .Abs (_dfad [_adgb +1]-_dfad [_adgb ])< _bcag &&_gebge .emptyColumn (_adgb );
if !_cgagb {_dbaa =append (_dbaa ,_adgb );};};if len (_ccdge )==_gebge ._baffe &&len (_dbaa )==_gebge ._cecgg {return _gebge ;};_faba :=textTable {_egabb :_gebge ._egabb ,_cecgg :len (_dbaa ),_baffe :len (_ccdge ),_eagdf :make (map[uint64 ]compositeCell ,len (_dbaa )*len (_ccdge ))};
if _cecg {_db .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",_gebge ._cecgg ,_gebge ._baffe ,len (_dbaa ),len (_ccdge ));_db .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_dbaa );
_db .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_ccdge );};for _fdcd ,_gagea :=range _ccdge {for _gdffd ,_dcaf :=range _dbaa {_dfbbe ,_abbgc :=_gebge .getComposite (_dcaf ,_gagea );if len (_dfbbe )==0{continue ;
};if _cecg {_af .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_gdffd ,_fdcd ,_dcaf ,_gagea ,_baeb (_dfbbe .merge ().text (),50));};_faba .putComposite (_gdffd ,_fdcd ,_dfbbe ,_abbgc );
};};return &_faba ;};func (_fdbc *textTable )computeBbox ()_gf .PdfRectangle {var _dgbf _gf .PdfRectangle ;_aggga :=false ;for _facfg :=0;_facfg < _fdbc ._baffe ;_facfg ++{for _bcbaf :=0;_bcbaf < _fdbc ._cecgg ;_bcbaf ++{_gbef :=_fdbc .get (_bcbaf ,_facfg );
if _gbef ==nil {continue ;};if !_aggga {_dgbf =_gbef .PdfRectangle ;_aggga =true ;}else {_dgbf =_cffe (_dgbf ,_gbef .PdfRectangle );};};};return _dgbf ;};func (_ddae rulingList )connections (_cgcf map[int ]intSet ,_ecbab int )intSet {_cegda :=make (intSet );
_bbbb :=make (intSet );var _fedc func (int );_fedc =func (_edga int ){if !_bbbb .has (_edga ){_bbbb .add (_edga );for _gacd :=range _ddae {if _cgcf [_gacd ].has (_edga ){_cegda .add (_gacd );};};for _agef :=range _ddae {if _cegda .has (_agef ){_fedc (_agef );
};};};};_fedc (_ecbab );return _cegda ;};func (_aggbd *textTable )put (_eeeb ,_feag int ,_fdbdb *textPara ){_aggbd ._bfdd [_dddg (_eeeb ,_feag )]=_fdbdb ;};func (_adae *textObject )getFontDirect (_cdea string )(*_gf .PdfFont ,error ){_dafg ,_cccg :=_adae .getFontDict (_cdea );
if _cccg !=nil {return nil ,_cccg ;};_eda ,_cccg :=_gf .NewPdfFontFromPdfObject (_dafg );if _cccg !=nil {_db .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",_cdea ,_cccg );
};return _eda ,_cccg ;};func (_ggfe *shapesState )lastpointEstablished ()(_ae .Point ,bool ){if _ggfe ._fag {return _ggfe ._aeeg ,false ;};_eebb :=len (_ggfe ._bcd );if _eebb > 0&&_ggfe ._bcd [_eebb -1]._bcfb {return _ggfe ._bcd [_eebb -1].last (),false ;
};return _ae .Point {},true ;};func _eadg (_gaae ,_gbfb _gf .PdfRectangle )bool {return _bdd (_gaae ,_gbfb )&&_cfba (_gaae ,_gbfb )};func _bfbc (_afcc ,_fega ,_deaa float64 )rulingKind {if _afcc >=_deaa &&_daae (_fega ,_afcc ){return _egaad ;};if _fega >=_deaa &&_daae (_afcc ,_fega ){return _cbdb ;
};return _cdcd ;};func (_cdbe paraList )xNeighbours (_fbaf float64 )map[*textPara ][]int {_fddd :=make ([]event ,2*len (_cdbe ));if _fbaf ==0{for _ceed ,_ddga :=range _cdbe {_fddd [2*_ceed ]=event {_ddga .Llx ,true ,_ceed };_fddd [2*_ceed +1]=event {_ddga .Urx ,false ,_ceed };
};}else {for _gfcbd ,_fgdb :=range _cdbe {_fddd [2*_gfcbd ]=event {_fgdb .Llx -_fbaf *_fgdb .fontsize (),true ,_gfcbd };_fddd [2*_gfcbd +1]=event {_fgdb .Urx +_fbaf *_fgdb .fontsize (),false ,_gfcbd };};};return _cdbe .eventNeighbours (_fddd );};type ruling struct{_ffag rulingKind ;
_fgcfb markKind ;_g .Color ;_adee float64 ;_bbgb float64 ;_daed float64 ;_cggf float64 ;};type textPara struct{_gf .PdfRectangle ;_afae _gf .PdfRectangle ;_ccgcb []*textLine ;_gagb *textTable ;_fbdf bool ;_fbcfc bool ;_cedd *textPara ;_aged *textPara ;
_gabb *textPara ;_fcbc *textPara ;};func (_gfa *textObject )checkOp (_fbd *_gb .ContentStreamOperation ,_fgd int ,_gee bool )(_abag bool ,_bga error ){if _gfa ==nil {var _bgfda []_gd .PdfObject ;if _fgd > 0{_bgfda =_fbd .Params ;if len (_bgfda )> _fgd {_bgfda =_bgfda [:_fgd ];
};};_db .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",_fbd .Operand ,_bgfda );};if _fgd >=0{if len (_fbd .Params )!=_fgd {if _gee {_bga =_dd .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");
};_db .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",_fbd .Operand ,_fgd ,len (_fbd .Params ),_fbd .Params );
return false ,_bga ;};};return true ,nil ;};func (_degf lineRuling )asRuling ()(*ruling ,bool ){_agcc :=ruling {_ffag :_degf ._fadc ,Color :_degf .Color ,_fgcfb :_ded };switch _degf ._fadc {case _cbdb :_agcc ._adee =_degf .xMean ();_agcc ._bbgb =_ec .Min (_degf ._gagbg .Y ,_degf ._ggee .Y );
_agcc ._daed =_ec .Max (_degf ._gagbg .Y ,_degf ._ggee .Y );case _egaad :_agcc ._adee =_degf .yMean ();_agcc ._bbgb =_ec .Min (_degf ._gagbg .X ,_degf ._ggee .X );_agcc ._daed =_ec .Max (_degf ._gagbg .X ,_degf ._ggee .X );default:_db .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_degf ._fadc );
return nil ,false ;};return &_agcc ,true ;};func (_cacg *ruling )intersects (_bfdg *ruling )bool {_bgbb :=(_cacg ._ffag ==_cbdb &&_bfdg ._ffag ==_egaad )||(_bfdg ._ffag ==_cbdb &&_cacg ._ffag ==_egaad );_bcga :=func (_cbgbb ,_bebae *ruling )bool {return _cbgbb ._bbgb -_gcgc <=_bebae ._adee &&_bebae ._adee <=_cbgbb ._daed +_gcgc ;
};_agge :=_bcga (_cacg ,_bfdg );_afbd :=_bcga (_bfdg ,_cacg );if _aacf {_af .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",_bgbb ,_agge ,_afbd ,_bgbb &&_agge &&_afbd ,_cacg ,_bfdg );
};return _bgbb &&_agge &&_afbd ;};
// 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 (_gce *Extractor )ExtractTextWithStats ()(_bec string ,_dcd int ,_dfa int ,_fg error ){_ecg ,_dcd ,_dfa ,_fg :=_gce .ExtractPageText ();if _fg !=nil {return "",_dcd ,_dfa ,_fg ;};return _ecg .Text (),_dcd ,_dfa ,nil ;};func (_aebb *subpath )removeDuplicates (){if len (_aebb ._ecc )==0{return ;
};_eebg :=[]_ae .Point {_aebb ._ecc [0]};for _ ,_cba :=range _aebb ._ecc [1:]{if !_fcedg (_cba ,_eebg [len (_eebg )-1]){_eebg =append (_eebg ,_cba );};};_aebb ._ecc =_eebg ;};func (_dfgaa *textMark )bbox ()_gf .PdfRectangle {return _dfgaa .PdfRectangle };
func (_geed paraList )llyOrdering ()[]int {_dcbc :=make ([]int ,len (_geed ));for _ebac :=range _geed {_dcbc [_ebac ]=_ebac ;};_ed .SliceStable (_dcbc ,func (_gcef ,_fbg int )bool {_gcce ,_fadf :=_dcbc [_gcef ],_dcbc [_fbg ];return _geed [_gcce ].Lly < _geed [_fadf ].Lly ;
});return _dcbc ;};func (_ccfd *textPara )taken ()bool {return _ccfd ==nil ||_ccfd ._fbdf };func (_debf paraList )yNeighbours (_fcfbf float64 )map[*textPara ][]int {_bdbdc :=make ([]event ,2*len (_debf ));if _fcfbf ==0{for _adcf ,_bdad :=range _debf {_bdbdc [2*_adcf ]=event {_bdad .Lly ,true ,_adcf };
_bdbdc [2*_adcf +1]=event {_bdad .Ury ,false ,_adcf };};}else {for _adebc ,_caafc :=range _debf {_bdbdc [2*_adebc ]=event {_caafc .Lly -_fcfbf *_caafc .fontsize (),true ,_adebc };_bdbdc [2*_adebc +1]=event {_caafc .Ury +_fcfbf *_caafc .fontsize (),false ,_adebc };
};};return _debf .eventNeighbours (_bdbdc );};func _cdfe (_dbab string )bool {for _ ,_bebca :=range _dbab {if !_bc .IsSpace (_bebca ){return false ;};};return true ;};func _fcbdd (_fgbe string ,_fdaf []rulingList ){_db .Log .Info ("\u0024\u0024 \u0025\u0064\u0020g\u0072\u0069\u0064\u0073\u0020\u002d\u0020\u0025\u0073",len (_fdaf ),_fgbe );
for _daeaa ,_dbedg :=range _fdaf {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_daeaa ,_dbedg .String ());};};func (_gaga *wordBag )text ()string {_gcac :=_gaga .allWords ();_dcfg :=make ([]string ,len (_gcac ));for _eacg ,_bbfg :=range _gcac {_dcfg [_eacg ]=_bbfg ._abceb ;
};return _e .Join (_dcfg ,"\u0020");};const (_fgcg markKind =iota ;_ded ;_gbge ;_abfb ;);func (_febfa paraList )applyTables (_fdfb []*textTable )paraList {var _abcfg paraList ;for _ ,_gfafb :=range _fdfb {_abcfg =append (_abcfg ,_gfafb .newTablePara ());
};for _ ,_fgbb :=range _febfa {if _fgbb ._fbdf {continue ;};_abcfg =append (_abcfg ,_fgbb );};return _abcfg ;};func _dbgcd (_cgffa []*textMark ,_ccdcf _gf .PdfRectangle )[]*textWord {var _cbdag []*textWord ;var _gabg *textWord ;if _dcgd {_db .Log .Info ("\u006d\u0061\u006beT\u0065\u0078\u0074\u0057\u006f\u0072\u0064\u0073\u003a\u0020\u0025\u0064\u0020\u006d\u0061\u0072\u006b\u0073",len (_cgffa ));
};_aded :=func (){if _gabg !=nil {_caedd :=_gabg .computeText ();if !_cdfe (_caedd ){_gabg ._abceb =_caedd ;_cbdag =append (_cbdag ,_gabg );if _dcgd {_db .Log .Info ("\u0061\u0064\u0064Ne\u0077\u0057\u006f\u0072\u0064\u003a\u0020\u0025\u0064\u003a\u0020\u0077\u006f\u0072\u0064\u003d\u0025\u0073",len (_cbdag )-1,_gabg .String ());
for _ebda ,_aeff :=range _gabg ._dbgad {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ebda ,_aeff .String ());};};};_gabg =nil ;};};for _ ,_bead :=range _cgffa {if _caeg &&_gabg !=nil &&len (_gabg ._dbgad )> 0{_dafa :=_gabg ._dbgad [len (_gabg ._dbgad )-1];
_cefc ,_fedg :=_gdafc (_bead ._ebce );_cfagd ,_efbe :=_gdafc (_dafa ._ebce );if _fedg &&!_efbe &&_dafa .inDiacriticArea (_bead ){_gabg .addDiacritic (_cefc );continue ;};if _efbe &&!_fedg &&_bead .inDiacriticArea (_dafa ){_gabg ._dbgad =_gabg ._dbgad [:len (_gabg ._dbgad )-1];
_gabg .appendMark (_bead ,_ccdcf );_gabg .addDiacritic (_cfagd );continue ;};};_eagef :=_cdfe (_bead ._ebce );if _eagef {_aded ();continue ;};if _gabg ==nil &&!_eagef {_gabg =_dcgef ([]*textMark {_bead },_ccdcf );continue ;};_egeec :=_gabg ._ceafb ;_facfge :=_ec .Abs (_gcaf (_ccdcf ,_bead )-_gabg ._fecd )/_egeec ;
_bgceg :=_ebfe (_bead ,_gabg )/_egeec ;if _bgceg >=_bdef ||!(-_acac <=_bgceg &&_facfge <=_ebbffb ){_aded ();_gabg =_dcgef ([]*textMark {_bead },_ccdcf );continue ;};_gabg .appendMark (_bead ,_ccdcf );};_aded ();return _cbdag ;};
// String returns a description of `v`.
func (_dgca *ruling )String ()string {if _dgca ._ffag ==_cdcd {return "\u004e\u004f\u0054\u0020\u0052\u0055\u004c\u0049\u004e\u0047";};_cbca ,_ffff :="\u0078","\u0079";if _dgca ._ffag ==_egaad {_cbca ,_ffff ="\u0079","\u0078";};_baba :="";if _dgca ._cggf !=0.0{_baba =_af .Sprintf (" \u0077\u0069\u0064\u0074\u0068\u003d\u0025\u002e\u0032\u0066",_dgca ._cggf );
};return _af .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",_dgca ._ffag ,_cbca ,_dgca ._adee ,_ffff ,_dgca ._bbgb ,_dgca ._daed ,_dgca ._daed -_dgca ._bbgb ,_dgca ._fgcfb ,_dgca .Color ,_baba );
};func (_caad *textPara )writeText (_fdee _b .Writer ){if _caad ._gagb ==nil {_caad .writeCellText (_fdee );return ;};for _babb :=0;_babb < _caad ._gagb ._baffe ;_babb ++{for _eegfb :=0;_eegfb < _caad ._gagb ._cecgg ;_eegfb ++{_gada :=_caad ._gagb .get (_eegfb ,_babb );
if _gada ==nil {_fdee .Write ([]byte ("\u0009"));}else {_gada .writeCellText (_fdee );};_fdee .Write ([]byte ("\u0020"));};if _babb < _caad ._gagb ._baffe -1{_fdee .Write ([]byte ("\u000a"));};};};func (_fcef *subpath )isQuadrilateral ()bool {if len (_fcef ._ecc )< 4||len (_fcef ._ecc )> 5{return false ;
};if len (_fcef ._ecc )==5{_fgfda :=_fcef ._ecc [0];_gadb :=_fcef ._ecc [4];if _fgfda .X !=_gadb .X ||_fgfda .Y !=_gadb .Y {return false ;};};return true ;};func (_aeab *textTable )emptyRow (_ggce int )bool {for _agefd :=0;_agefd < _aeab ._cecgg ;_agefd ++{_dbfea :=_aeab .get (_agefd ,_ggce );
if _dbfea !=nil &&_dbfea .text ()!=""{return false ;};};return true ;};func (_gbgf compositeCell )String ()string {_dfcg :="";if len (_gbgf .paraList )> 0{_dfcg =_baeb (_gbgf .paraList .merge ().text (),50);};return _af .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0070\u0061\u0072a\u0073\u0020\u0025\u0071",_gbgf .PdfRectangle ,len (_gbgf .paraList ),_dfcg );
};
// 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 (_cfd *TextMarkArray )RangeOffset (start ,end int )(*TextMarkArray ,error ){if _cfd ==nil {return nil ,_dd .New ("\u006da\u003d\u003d\u006e\u0069\u006c");};if end < start {return nil ,_af .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 );
};_gdg :=len (_cfd ._ece );if _gdg ==0{return _cfd ,nil ;};if start < _cfd ._ece [0].Offset {start =_cfd ._ece [0].Offset ;};if end > _cfd ._ece [_gdg -1].Offset +1{end =_cfd ._ece [_gdg -1].Offset +1;};_fefd :=_ed .Search (_gdg ,func (_gbdc int )bool {return _cfd ._ece [_gbdc ].Offset +len (_cfd ._ece [_gbdc ].Text )-1>=start });
if !(0<=_fefd &&_fefd < _gdg ){_fdda :=_af .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 ,_fefd ,_gdg ,_cfd ._ece [0],_cfd ._ece [_gdg -1]);
return nil ,_fdda ;};_eddb :=_ed .Search (_gdg ,func (_aaae int )bool {return _cfd ._ece [_aaae ].Offset > end -1});if !(0<=_eddb &&_eddb < _gdg ){_bfg :=_af .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 ,_eddb ,_gdg ,_cfd ._ece [0],_cfd ._ece [_gdg -1]);
return nil ,_bfg ;};if _eddb <=_fefd {return nil ,_af .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 ,_fefd ,_eddb );
};return &TextMarkArray {_ece :_cfd ._ece [_fefd :_eddb ]},nil ;};func _cffe (_edgeb ,_ffg _gf .PdfRectangle )_gf .PdfRectangle {return _gf .PdfRectangle {Llx :_ec .Min (_edgeb .Llx ,_ffg .Llx ),Lly :_ec .Min (_edgeb .Lly ,_ffg .Lly ),Urx :_ec .Max (_edgeb .Urx ,_ffg .Urx ),Ury :_ec .Max (_edgeb .Ury ,_ffg .Ury )};
};func (_cfb *subpath )last ()_ae .Point {return _cfb ._ecc [len (_cfb ._ecc )-1]};func (_cbgd paraList )findTextTables ()[]*textTable {var _bddce []*textTable ;for _ ,_abee :=range _cbgd {if _abee .taken ()||_abee .Width ()==0{continue ;};_degfa :=_abee .isAtom ();
if _degfa ==nil {continue ;};_degfa .growTable ();if _degfa ._cecgg *_degfa ._baffe < _acec {continue ;};_degfa .markCells ();_degfa .log ("\u0067\u0072\u006fw\u006e");_bddce =append (_bddce ,_degfa );};return _bddce ;};type compositeCell struct{_gf .PdfRectangle ;
paraList ;};func (_ebgg *wordBag )blocked (_fcf *textWord )bool {if _fcf .Urx < _ebgg .Llx {_fagg :=_dffdc (_fcf .PdfRectangle );_gage :=_fbbd (_ebgg .PdfRectangle );if _ebgg ._efbc .blocks (_fagg ,_gage ){if _bagbb {_db .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0078\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_fcf ,_ebgg );
};return true ;};}else if _ebgg .Urx < _fcf .Llx {_fbcb :=_dffdc (_ebgg .PdfRectangle );_eaaf :=_fbbd (_fcf .PdfRectangle );if _ebgg ._efbc .blocks (_fbcb ,_eaaf ){if _bagbb {_db .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0078\u2192\u0020:\u0020\u0025\u0073\u0020%s",_fcf ,_ebgg );
};return true ;};};if _fcf .Ury < _ebgg .Lly {_dggde :=_dafcc (_fcf .PdfRectangle );_feb :=_dfed (_ebgg .PdfRectangle );if _ebgg ._daa .blocks (_dggde ,_feb ){if _bagbb {_db .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0079\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_fcf ,_ebgg );
};return true ;};}else if _ebgg .Ury < _fcf .Lly {_bafag :=_dafcc (_ebgg .PdfRectangle );_gbbd :=_dfed (_fcf .PdfRectangle );if _ebgg ._daa .blocks (_bafag ,_gbbd ){if _bagbb {_db .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0079\u2192\u0020:\u0020\u0025\u0073\u0020%s",_fcf ,_ebgg );
};return true ;};};return false ;};var _df =false ;type rectRuling struct{_cebdd rulingKind ;_dfbba markKind ;_g .Color ;_gf .PdfRectangle ;};func _cfcc (_afac map[int ][]float64 )string {_eaad :=_cacc (_afac );_eedd :=make ([]string ,len (_afac ));for _ggfbc ,_fgee :=range _eaad {_eedd [_ggfbc ]=_af .Sprintf ("\u0025\u0064\u003a\u0020\u0025\u002e\u0032\u0066",_fgee ,_afac [_fgee ]);
};return _af .Sprintf ("\u007b\u0025\u0073\u007d",_e .Join (_eedd ,"\u002c\u0020"));};func (_efggg *textWord )addDiacritic (_acagf string ){_defdc :=_efggg ._dbgad [len (_efggg ._dbgad )-1];_defdc ._ebce +=_acagf ;_defdc ._ebce =_agc .NFKC .String (_defdc ._ebce );
};
// ImageExtractOptions contains options for controlling image extraction from
// PDF pages.
type ImageExtractOptions struct{IncludeInlineStencilMasks bool ;};type textMark struct{_gf .PdfRectangle ;_bcbg int ;_ebce string ;_eabe string ;_cagg *_gf .PdfFont ;_bbab float64 ;_abcb float64 ;_ebfa _ae .Matrix ;_facg _ae .Point ;_deb _gf .PdfRectangle ;
_eeac _g .Color ;_dbbcb _g .Color ;};func (_bae *stateStack )empty ()bool {return len (*_bae )==0};func _adde (_geaaf ,_abagf float64 )string {_adbg :=!_fbfd (_geaaf -_abagf );if _adbg {return "\u000a";};return "\u0020";};type bounded interface{bbox ()_gf .PdfRectangle };
func (_dfab rulingList )toTilings ()(rulingList ,[]gridTiling ){_dfab .log ("\u0074o\u0054\u0069\u006c\u0069\u006e\u0067s");if len (_dfab )==0{return nil ,nil ;};_dfab =_dfab .tidied ("\u0061\u006c\u006c");_dfab .log ("\u0074\u0069\u0064\u0069\u0065\u0064");
_cgcbg :=_dfab .toGrids ();_affb :=make ([]gridTiling ,len (_cgcbg ));for _cfcde ,_gfgg :=range _cgcbg {_affb [_cfcde ]=_gfgg .asTiling ();};return _dfab ,_affb ;};func _deegg (_fffb _gf .PdfRectangle ,_fbee []*textLine )*textPara {return &textPara {PdfRectangle :_fffb ,_ccgcb :_fbee };
};func _dcgef (_fafg []*textMark ,_dbfc _gf .PdfRectangle )*textWord {_gfceg :=_fafg [0].PdfRectangle ;_aebd :=_fafg [0]._bbab ;for _ ,_efafg :=range _fafg [1:]{_gfceg =_cffe (_gfceg ,_efafg .PdfRectangle );if _efafg ._bbab > _aebd {_aebd =_efafg ._bbab ;
};};return &textWord {PdfRectangle :_gfceg ,_dbgad :_fafg ,_fecd :_dbfc .Ury -_gfceg .Lly ,_ceafb :_aebd };};func _eege (_gadf []pathSection )rulingList {_gfgf (_gadf );if _aacf {_db .Log .Info ("\u006da\u006b\u0065\u0046\u0069l\u006c\u0052\u0075\u006c\u0069n\u0067s\u003a \u0025\u0064\u0020\u0066\u0069\u006c\u006cs",len (_gadf ));
};var _dfcf rulingList ;for _ ,_afdg :=range _gadf {for _ ,_cbac :=range _afdg ._gbdd {if !_cbac .isQuadrilateral (){if _aacf {_db .Log .Error ("!\u0069s\u0051\u0075\u0061\u0064\u0072\u0069\u006c\u0061t\u0065\u0072\u0061\u006c: \u0025\u0073",_cbac );};
continue ;};if _afgd ,_ggcde :=_cbac .makeRectRuling (_afdg .Color );_ggcde {_dfcf =append (_dfcf ,_afgd );}else {if _daeag {_db .Log .Error ("\u0021\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0073",_cbac );
};};};};if _aacf {_db .Log .Info ("\u006d\u0061\u006b\u0065Fi\u006c\u006c\u0052\u0075\u006c\u0069\u006e\u0067\u0073\u003a\u0020\u0025\u0073",_dfcf .String ());};return _dfcf ;};func (_gdfee rulingList )isActualGrid ()(rulingList ,bool ){_acegg ,_edag :=_gdfee .augmentGrid ();
if !(len (_acegg )>=_cgbc +1&&len (_edag )>=_cbec +1){if _aacf {_db .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 (_acegg ),len (_edag ),_cgbc +1,_cbec +1);
};return nil ,false ;};if _aacf {_db .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",_gdfee ,len (_acegg )>=2,len (_edag )>=2,len (_acegg )>=2&&len (_edag )>=2);
for _gefd ,_cadg :=range _gdfee {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0076\u000a",_gefd ,_cadg );};};if _edab {_fee ,_dagb :=_acegg [0],_acegg [len (_acegg )-1];_cfaga ,_beccd :=_edag [0],_edag [len (_edag )-1];if !(_cebdc (_fee ._adee -_cfaga ._bbgb )&&_cebdc (_dagb ._adee -_cfaga ._daed )&&_cebdc (_cfaga ._adee -_fee ._daed )&&_cebdc (_beccd ._adee -_fee ._bbgb )){if _aacf {_db .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",_fee ,_dagb ,_cfaga ,_beccd );
};return nil ,false ;};}else {if !_acegg .aligned (){if _ecbd {_db .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 (_acegg ));
};return nil ,false ;};if !_edag .aligned (){if _aacf {_db .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 (_edag ));
};return nil ,false ;};};_eefg :=append (_acegg ,_edag ...);return _eefg ,true ;};
// String returns a string describing `pt`.
func (_ceb PageText )String ()string {_bggg :=_af .Sprintf ("P\u0061\u0067\u0065\u0054ex\u0074:\u0020\u0025\u0064\u0020\u0065l\u0065\u006d\u0065\u006e\u0074\u0073",len (_ceb ._gefac ));_acdc :=[]string {"\u002d"+_bggg };for _ ,_ebab :=range _ceb ._gefac {_acdc =append (_acdc ,_ebab .String ());
};_acdc =append (_acdc ,"\u002b"+_bggg );return _e .Join (_acdc ,"\u000a");};func (_effg *stateStack )size ()int {return len (*_effg )};func _gfdbc (_fbea int ,_cgec func (int ,int )bool )[]int {_ddaef :=make ([]int ,_fbea );for _dece :=range _ddaef {_ddaef [_dece ]=_dece ;
};_ed .Slice (_ddaef ,func (_ggfd ,_bgbbe int )bool {return _cgec (_ddaef [_ggfd ],_ddaef [_bgbbe ])});return _ddaef ;};func (_egef *wordBag )pullWord (_dafc *textWord ,_dab int ,_dfef map[int ]map[*textWord ]struct{}){_egef .PdfRectangle =_cffe (_egef .PdfRectangle ,_dafc .PdfRectangle );
if _dafc ._ceafb > _egef ._agbd {_egef ._agbd =_dafc ._ceafb ;};_egef ._gceg [_dab ]=append (_egef ._gceg [_dab ],_dafc );_dfef [_dab ][_dafc ]=struct{}{};};func _bgdb (_aefg *wordBag ,_bedbf float64 ,_edgg ,_cdc rulingList )[]*wordBag {var _afda []*wordBag ;
for _ ,_gddb :=range _aefg .depthIndexes (){_cbeca :=false ;for !_aefg .empty (_gddb ){_dbdc :=_aefg .firstReadingIndex (_gddb );_ccbb :=_aefg .firstWord (_dbdc );_gbcd :=_bafd (_ccbb ,_bedbf ,_edgg ,_cdc );_aefg .removeWord (_ccbb ,_dbdc );if _bcg {_db .Log .Info ("\u0066\u0069\u0072\u0073\u0074\u0057\u006f\u0072\u0064\u0020\u005e\u005e^\u005e\u0020\u0025\u0073",_ccbb .String ());
};for _bagd :=true ;_bagd ;_bagd =_cbeca {_cbeca =false ;_caef :=_gbab *_gbcd ._agbd ;_bedf :=_faeac *_gbcd ._agbd ;_afcee :=_fgcf *_gbcd ._agbd ;if _bcg {_db .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",_gbcd .minDepth (),_gbcd .maxDepth (),_afcee ,_bedf );
};if _aefg .scanBand ("\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c",_gbcd ,_fgfa (_dbfa ,0),_gbcd .minDepth ()-_afcee ,_gbcd .maxDepth ()+_afcee ,_dbba ,false ,false )> 0{_cbeca =true ;};if _aefg .scanBand ("\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_gbcd ,_fgfa (_dbfa ,_bedf ),_gbcd .minDepth (),_gbcd .maxDepth (),_egdc ,false ,false )> 0{_cbeca =true ;
};if _cbeca {continue ;};_eedec :=_aefg .scanBand ("",_gbcd ,_fgfa (_abea ,_caef ),_gbcd .minDepth (),_gbcd .maxDepth (),_ebge ,true ,false );if _eedec > 0{_gbca :=(_gbcd .maxDepth ()-_gbcd .minDepth ())/_gbcd ._agbd ;if (_eedec > 1&&float64 (_eedec )> 0.3*_gbca )||_eedec <=10{if _aefg .scanBand ("\u006f\u0074\u0068e\u0072",_gbcd ,_fgfa (_abea ,_caef ),_gbcd .minDepth (),_gbcd .maxDepth (),_ebge ,false ,true )> 0{_cbeca =true ;
};};};};_afda =append (_afda ,_gbcd );};};return _afda ;};func (_cgegd *textTable )compositeColCorridors ()map[int ][]float64 {_bbbd :=make (map[int ][]float64 ,_cgegd ._cecgg );if _cecg {_db .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",_cgegd ._cecgg );
};for _dceda :=0;_dceda < _cgegd ._cecgg ;_dceda ++{_bbbd [_dceda ]=nil ;};return _bbbd ;};func (_ccb *textLine )pullWord (_dccb *wordBag ,_ebfg *textWord ,_bfgg int ){_ccb .appendWord (_ebfg );_dccb .removeWord (_ebfg ,_bfgg );};
// Tables returns the tables extracted from the page.
func (_cagbb PageText )Tables ()[]TextTable {if _cecg {_db .Log .Info ("\u0054\u0061\u0062\u006c\u0065\u0073\u003a\u0020\u0025\u0064",len (_cagbb ._adbb ));};return _cagbb ._adbb ;};func _dcca (_gbce bounded )float64 {return -_gbce .bbox ().Lly };func (_afgg paraList )readBefore (_cfacc []int ,_edeg ,_fbfc int )bool {_bfea ,_bcff :=_afgg [_edeg ],_afgg [_fbfc ];
if _acbd (_bfea ,_bcff )&&_bfea .Lly > _bcff .Lly {return true ;};if !(_bfea ._afae .Urx < _bcff ._afae .Llx ){return false ;};_bgbe ,_babe :=_bfea .Lly ,_bcff .Lly ;if _bgbe > _babe {_babe ,_bgbe =_bgbe ,_babe ;};_gcff :=_ec .Max (_bfea ._afae .Llx ,_bcff ._afae .Llx );
_cedc :=_ec .Min (_bfea ._afae .Urx ,_bcff ._afae .Urx );_abac :=_afgg .llyRange (_cfacc ,_bgbe ,_babe );for _ ,_gafe :=range _abac {if _gafe ==_edeg ||_gafe ==_fbfc {continue ;};_daeg :=_afgg [_gafe ];if _daeg ._afae .Llx <=_cedc &&_gcff <=_daeg ._afae .Urx {return false ;
};};return true ;};func (_bgfef rulingList )primaries ()[]float64 {_gdae :=make (map[float64 ]struct{},len (_bgfef ));for _ ,_ffbe :=range _bgfef {_gdae [_ffbe ._adee ]=struct{}{};};_gdfd :=make ([]float64 ,len (_gdae ));_bbea :=0;for _fcca :=range _gdae {_gdfd [_bbea ]=_fcca ;
_bbea ++;};_ed .Float64s (_gdfd );return _gdfd ;};func (_bege rulingList )vertsHorzs ()(rulingList ,rulingList ){var _aagfg ,_afebf rulingList ;for _ ,_gcfa :=range _bege {switch _gcfa ._ffag {case _cbdb :_aagfg =append (_aagfg ,_gcfa );case _egaad :_afebf =append (_afebf ,_gcfa );
};};return _aagfg ,_afebf ;};const (_cdcd rulingKind =iota ;_egaad ;_cbdb ;);type rulingKind int ;func (_fgge *textTable )growTable (){_gdfeb :=func (_gfgcd paraList ){_fgge ._baffe ++;for _dfgf :=0;_dfgf < _fgge ._cecgg ;_dfgf ++{_afdb :=_gfgcd [_dfgf ];
_fgge .put (_dfgf ,_fgge ._baffe -1,_afdb );};};_dggb :=func (_fdafg paraList ){_fgge ._cecgg ++;for _fedce :=0;_fedce < _fgge ._baffe ;_fedce ++{_aaac :=_fdafg [_fedce ];_fgge .put (_fgge ._cecgg -1,_fedce ,_aaac );};};if _gade {_fgge .log ("\u0067r\u006f\u0077\u0054\u0061\u0062\u006ce");
};for _gege :=0;;_gege ++{_agda :=false ;_gcde :=_fgge .getDown ();_feac :=_fgge .getRight ();if _gade {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gege ,_fgge );_af .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0020\u0064\u006f\u0077\u006e\u003d\u0025\u0073\u000a",_gcde );
_af .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0072\u0069\u0067\u0068\u0074\u003d\u0025\u0073\u000a",_feac );};if _gcde !=nil &&_feac !=nil {_afbe :=_gcde [len (_gcde )-1];if _afbe !=nil &&!_afbe ._fbdf &&_afbe ==_feac [len (_feac )-1]{_gdfeb (_gcde );
if _feac =_fgge .getRight ();_feac !=nil {_dggb (_feac );_fgge .put (_fgge ._cecgg -1,_fgge ._baffe -1,_afbe );};_agda =true ;};};if !_agda &&_gcde !=nil {_gdfeb (_gcde );_agda =true ;};if !_agda &&_feac !=nil {_dggb (_feac );_agda =true ;};if !_agda {break ;
};};};var (_eb =_dd .New ("\u0074\u0079p\u0065\u0020\u0063h\u0065\u0063\u006b\u0020\u0065\u0072\u0072\u006f\u0072");_de =_dd .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072"););
// String returns a string descibing `i`.
func (_afga gridTile )String ()string {_abbd :=func (_agcge bool ,_gcba string )string {if _agcge {return _gcba ;};return "\u005f";};return _af .Sprintf ("\u00256\u002e2\u0066\u0020\u0025\u0031\u0073%\u0031\u0073%\u0031\u0073\u0025\u0031\u0073",_afga .PdfRectangle ,_abbd (_afga ._gebef ,"\u004c"),_abbd (_afga ._gbcae ,"\u0052"),_abbd (_afga ._cfgb ,"\u0042"),_abbd (_afga ._abeaf ,"\u0054"));
};func _edfd (_agfdc map[float64 ]gridTile )[]float64 {_abbb :=make ([]float64 ,0,len (_agfdc ));for _ffec :=range _agfdc {_abbb =append (_abbb ,_ffec );};_ed .Float64s (_abbb );return _abbb ;};func (_dbeb *shapesState )lineTo (_dcc ,_geb float64 ){if _abef {_db .Log .Info ("\u006c\u0069\u006eeT\u006f\u0028\u0025\u002e\u0032\u0066\u002c\u0025\u002e\u0032\u0066\u0020\u0070\u003d\u0025\u002e\u0032\u0066",_dcc ,_geb ,_dbeb .devicePoint (_dcc ,_geb ));
};_dbeb .addPoint (_dcc ,_geb );};func (_fba *PageText )computeViews (){var _gbd rulingList ;if _eceg {_efdd :=_dcdbb (_fba ._faee );_gbd =append (_gbd ,_efdd ...);};if _ceeg {_fbc :=_eege (_fba ._faeea );_gbd =append (_gbd ,_fbc ...);};_gbd ,_cgdgb :=_gbd .toTilings ();
var _bfd paraList ;_facf :=len (_fba ._gefac );for _aafa :=0;_aafa < 360&&_facf > 0;_aafa +=90{_fgdg :=make ([]*textMark ,0,len (_fba ._gefac )-_facf );for _ ,_cdf :=range _fba ._gefac {if _cdf ._bcbg ==_aafa {_fgdg =append (_fgdg ,_cdf );};};if len (_fgdg )> 0{_edbd :=_cfbg (_fgdg ,_fba ._bbbf ,_gbd ,_cgdgb );
_bfd =append (_bfd ,_edbd ...);_facf -=len (_fgdg );};};_cab :=new (_cc .Buffer );_bfd .writeText (_cab );_fba ._gece =_cab .String ();_fba ._bcf =_bfd .toTextMarks ();_fba ._adbb =_bfd .tables ();if _cecg {_db .Log .Info ("\u0063\u006f\u006dpu\u0074\u0065\u0056\u0069\u0065\u0077\u0073\u003a\u0020\u0074\u0061\u0062\u006c\u0065\u0073\u003d\u0025\u0064",len (_fba ._adbb ));
};};func _gfce (_gggc float64 )float64 {return _fece *_ec .Round (_gggc /_fece )};type textWord struct{_gf .PdfRectangle ;_fecd float64 ;_abceb string ;_dbgad []*textMark ;_ceafb float64 ;_bfad bool ;};func (_abdb *textLine )markWordBoundaries (){_dccae :=_dgaa *_abdb ._dfaf ;
for _baec ,_edbe :=range _abdb ._egcb [1:]{if _ebfe (_edbe ,_abdb ._egcb [_baec ])>=_dccae {_edbe ._bfad =true ;};};};func (_dcdbd *wordBag )minDepth ()float64 {return _dcdbd ._efdc -(_dcdbd .Ury -_dcdbd ._agbd )};type stateStack []*textState ;type markKind int ;
func (_dfbcc rulingList )aligned ()bool {if len (_dfbcc )< 2{return false ;};_bdda :=make (map[*ruling ]int );_bdda [_dfbcc [0]]=0;for _ ,_eabcb :=range _dfbcc [1:]{_ebgf :=false ;for _dffec :=range _bdda {if _eabcb .gridIntersecting (_dffec ){_bdda [_dffec ]++;
_ebgf =true ;break ;};};if !_ebgf {_bdda [_eabcb ]=0;};};_eabb :=0;for _ ,_aeegf :=range _bdda {if _aeegf ==0{_eabb ++;};};_ccdg :=float64 (_eabb )/float64 (len (_dfbcc ));_gefdd :=_ccdg <=1.0-_aedb ;if _aacf {_db .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",_gefdd ,_ccdg ,_eabb ,len (_dfbcc ),_dfbcc .String ());
};return _gefdd ;};var _agaf =TextMark {Text :"\u005b\u0058\u005d",Original :"\u0020",Meta :true ,FillColor :_g .White ,StrokeColor :_g .White };func (_bbagg *textPara )depth ()float64 {if _bbagg ._fbcfc {return -1.0;};if len (_bbagg ._ccgcb )> 0{return _bbagg ._ccgcb [0]._dbbgg ;
};return _bbagg ._gagb .depth ();};func _fddc (_facfe ,_addee float64 )bool {return _ec .Abs (_facfe -_addee )<=_gcgc };func (_ecf *textPara )toTextMarks (_geff *int )[]TextMark {if _ecf ._gagb ==nil {return _ecf .toCellTextMarks (_geff );};var _cfcb []TextMark ;
for _fbbg :=0;_fbbg < _ecf ._gagb ._baffe ;_fbbg ++{for _agac :=0;_agac < _ecf ._gagb ._cecgg ;_agac ++{_cabd :=_ecf ._gagb .get (_agac ,_fbbg );if _cabd ==nil {_cfcb =_adaea (_cfcb ,_geff ,"\u0009");}else {_fcbd :=_cabd .toCellTextMarks (_geff );_cfcb =append (_cfcb ,_fcbd ...);
};_cfcb =_adaea (_cfcb ,_geff ,"\u0020");};if _fbbg < _ecf ._gagb ._baffe -1{_cfcb =_adaea (_cfcb ,_geff ,"\u000a");};};return _cfcb ;};
// Append appends `mark` to the mark array.
func (_fcd *TextMarkArray )Append (mark TextMark ){_fcd ._ece =append (_fcd ._ece ,mark )};func (_beag *textObject )getCurrentFont ()*_gf .PdfFont {var _dfga *_gf .PdfFont ;if !_beag ._egd .empty (){_dfga =_beag ._egd .top ()._bff ;};if _dfga ==nil {_db .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 _gf .DefaultFont ();};return _dfga ;};func _egdcg (_faae []float64 ,_dggg ,_bbaf float64 )[]float64 {_cgedg ,_dade :=_dggg ,_bbaf ;if _dade < _cgedg {_cgedg ,_dade =_dade ,_cgedg ;};_cgag :=make ([]float64 ,0,len (_faae )+2);_cgag =append (_cgag ,_dggg );
for _ ,_aeef :=range _faae {if _aeef <=_cgedg {continue ;}else if _aeef >=_dade {break ;};_cgag =append (_cgag ,_aeef );};_cgag =append (_cgag ,_bbaf );return _cgag ;};type imageExtractContext struct{_dcb []ImageMark ;_bag int ;_bg int ;_ee int ;_acb map[*_gd .PdfObjectStream ]*cachedImage ;
_fe *ImageExtractOptions ;};
// PageImages represents extracted images on a PDF page with spatial information:
// display position and size.
type PageImages struct{Images []ImageMark ;};func (_ddcb *textTable )depth ()float64 {_begb :=1e10;for _gaff :=0;_gaff < _ddcb ._cecgg ;_gaff ++{_dbcg :=_ddcb .get (_gaff ,0);if _dbcg ==nil ||_dbcg ._fbcfc {continue ;};_begb =_ec .Min (_begb ,_dbcg .depth ());
};return _begb ;};func (_cdace rulingList )tidied (_cecd string )rulingList {_bbdeg :=_cdace .removeDuplicates ();_bbdeg .log ("\u0075n\u0069\u0071\u0075\u0065\u0073");_gfef :=_bbdeg .snapToGroups ();if _gfef ==nil {return nil ;};_gfef .sort ();if _aacf {_db .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",_cecd ,len (_cdace ),len (_bbdeg ),len (_gfef ));
};_gfef .log ("\u0063o\u0061\u006c\u0065\u0073\u0063\u0065d");return _gfef ;};func _eebc (_daea ,_cggb bounded )float64 {return _dcca (_daea )-_dcca (_cggb )};func _fbgg (_abdf _gf .PdfColorspace ,_geec _gf .PdfColor )_g .Color {if _abdf ==nil ||_geec ==nil {return _g .Black ;
};_ffbg ,_acee :=_abdf .ColorToRGB (_geec );if _acee !=nil {_db .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",_geec ,_abdf ,_acee );
return _g .Black ;};_bafgb ,_bcdd :=_ffbg .(*_gf .PdfColorDeviceRGB );if !_bcdd {_db .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",_ffbg );
return _g .Black ;};return _g .NRGBA {R :uint8 (_bafgb .R ()*255),G :uint8 (_bafgb .G ()*255),B :uint8 (_bafgb .B ()*255),A :uint8 (255)};};func _ebfe (_daac ,_abcf bounded )float64 {return _daac .bbox ().Llx -_abcf .bbox ().Urx };func (_fabee *wordBag )sort (){for _ ,_afe :=range _fabee ._gceg {_ed .Slice (_afe ,func (_eaf ,_cebd int )bool {return _dad (_afe [_eaf ],_afe [_cebd ])< 0});
};};func _fbbd (_effbf _gf .PdfRectangle )*ruling {return &ruling {_ffag :_cbdb ,_adee :_effbf .Llx ,_bbgb :_effbf .Lly ,_daed :_effbf .Ury };};func (_acbb paraList )toTextMarks ()[]TextMark {_edeb :=0;var _bdeea []TextMark ;for _dffa ,_eddg :=range _acbb {if _eddg ._fbcfc {continue ;
};_ggdc :=_eddg .toTextMarks (&_edeb );_bdeea =append (_bdeea ,_ggdc ...);if _dffa !=len (_acbb )-1{if _ebfd (_eddg ,_acbb [_dffa +1]){_bdeea =_adaea (_bdeea ,&_edeb ,"\u0020");}else {_bdeea =_adaea (_bdeea ,&_edeb ,"\u000a");_bdeea =_adaea (_bdeea ,&_edeb ,"\u000a");
};};};_bdeea =_adaea (_bdeea ,&_edeb ,"\u000a");_bdeea =_adaea (_bdeea ,&_edeb ,"\u000a");return _bdeea ;};func (_bdaaa *textTable )emptyColumn (_dedf int )bool {for _acda :=0;_acda < _bdaaa ._baffe ;_acda ++{_bfaee :=_bdaaa .get (_dedf ,_acda );if _bfaee !=nil &&_bfaee .text ()!=""{return false ;
};};return true ;};func (_edae *wordBag )makeRemovals ()map[int ]map[*textWord ]struct{}{_acae :=make (map[int ]map[*textWord ]struct{},len (_edae ._gceg ));for _ebca :=range _edae ._gceg {_acae [_ebca ]=make (map[*textWord ]struct{});};return _acae ;};
func _dffdc (_cdefc _gf .PdfRectangle )*ruling {return &ruling {_ffag :_cbdb ,_adee :_cdefc .Urx ,_bbgb :_cdefc .Lly ,_daed :_cdefc .Ury };};func (_ggad *shapesState )drawRectangle (_cgeg ,_dgfc ,_ddcc ,_dbgac float64 ){if _abef {_gbea :=_ggad .devicePoint (_cgeg ,_dgfc );
_cad :=_ggad .devicePoint (_cgeg +_ddcc ,_dgfc +_dbgac );_cff :=_gf .PdfRectangle {Llx :_gbea .X ,Lly :_gbea .Y ,Urx :_cad .X ,Ury :_cad .Y };_db .Log .Info ("d\u0072a\u0077\u0052\u0065\u0063\u0074\u0061\u006e\u0067l\u0065\u003a\u0020\u00256.\u0032\u0066",_cff );
};_ggad .newSubPath ();_ggad .moveTo (_cgeg ,_dgfc );_ggad .lineTo (_cgeg +_ddcc ,_dgfc );_ggad .lineTo (_cgeg +_ddcc ,_dgfc +_dbgac );_ggad .lineTo (_cgeg ,_dgfc +_dbgac );_ggad .closePath ();};type paraList []*textPara ;func _gdafc (_ceefb string )(string ,bool ){_edac :=[]rune (_ceefb );
if len (_edac )!=1{return "",false ;};_dcdf ,_dcfgf :=_bbgbg [_edac [0]];return _dcdf ,_dcfgf ;};
// String returns a description of `w`.
func (_fcaaf *textWord )String ()string {return _af .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",_fcaaf ._fecd ,_fcaaf .PdfRectangle ,_fcaaf ._ceafb ,_fcaaf ._abceb );
};type textState struct{_afd float64 ;_ebbff float64 ;_dbga float64 ;_bceg float64 ;_cbea float64 ;_bfeb RenderMode ;_aee float64 ;_bff *_gf .PdfFont ;_fce _gf .PdfRectangle ;_bfb int ;_bbbc int ;};func _dddg (_bgddg ,_dccab int )uint64 {return uint64 (_bgddg )*0x1000000+uint64 (_dccab )};
// String returns a description of `b`.
func (_gdf *wordBag )String ()string {var _cbda []string ;for _ ,_gfbf :=range _gdf .depthIndexes (){_bcef :=_gdf ._gceg [_gfbf ];for _ ,_agbb :=range _bcef {_cbda =append (_cbda ,_agbb ._abceb );};};return _af .Sprintf ("\u0025.\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065=\u0025\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0025\u0071",_gdf .PdfRectangle ,_gdf ._agbd ,len (_cbda ),_cbda );
};func (_cadf gridTiling )log (_fbbgc string ){if !_bgca {return ;};_db .Log .Info ("\u0074i\u006ci\u006e\u0067\u003a\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0071",len (_cadf ._dadg ),len (_cadf ._ebff ),_fbbgc );_af .Printf ("\u0020\u0020\u0020l\u006c\u0078\u003d\u0025\u002e\u0032\u0066\u000a",_cadf ._dadg );
_af .Printf ("\u0020\u0020\u0020l\u006c\u0079\u003d\u0025\u002e\u0032\u0066\u000a",_cadf ._ebff );for _cffg ,_efgc :=range _cadf ._ebff {_dbfaa ,_dbedf :=_cadf ._ggace [_efgc ];if !_dbedf {continue ;};_af .Printf ("%\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u000a",_cffg ,_efgc );
for _fbab ,_bcebc :=range _cadf ._dadg {_aeaee ,_gfaa :=_dbfaa [_bcebc ];if !_gfaa {continue ;};_af .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_fbab ,_aeaee .String ());};};};func (_addc *stateStack )top ()*textState {if _addc .empty (){return nil ;
};return (*_addc )[_addc .size ()-1];};
// String returns a human readable description of `ss`.
func (_ecggc *shapesState )String ()string {return _af .Sprintf ("\u007b\u0025\u0064\u0020su\u0062\u0070\u0061\u0074\u0068\u0073\u0020\u0066\u0072\u0065\u0073\u0068\u003d\u0025t\u007d",len (_ecggc ._bcd ),_ecggc ._fag );};func (_fged *wordBag )removeWord (_cfea *textWord ,_dfbc int ){_abgg :=_fged ._gceg [_dfbc ];
_abgg =_dccbc (_abgg ,_cfea );if len (_abgg )==0{delete (_fged ._gceg ,_dfbc );}else {_fged ._gceg [_dfbc ]=_abgg ;};};func (_dbac paraList )eventNeighbours (_agfce []event )map[*textPara ][]int {_ed .Slice (_agfce ,func (_bbgcf ,_gfcec int )bool {_gecga ,_eedce :=_agfce [_bbgcf ],_agfce [_gfcec ];
_fbed ,_ccfad :=_gecga ._gbdgg ,_eedce ._gbdgg ;if _fbed !=_ccfad {return _fbed < _ccfad ;};if _gecga ._fbfe !=_eedce ._fbfe {return _gecga ._fbfe ;};return _bbgcf < _gfcec ;});_dgcae :=make (map[int ]intSet );_cefb :=make (intSet );for _ ,_acccg :=range _agfce {if _acccg ._fbfe {_dgcae [_acccg ._fagc ]=make (intSet );
for _cgfbgf :=range _cefb {if _cgfbgf !=_acccg ._fagc {_dgcae [_acccg ._fagc ].add (_cgfbgf );_dgcae [_cgfbgf ].add (_acccg ._fagc );};};_cefb .add (_acccg ._fagc );}else {_cefb .del (_acccg ._fagc );};};_bdcd :=map[*textPara ][]int {};for _eeee ,_eage :=range _dgcae {_acad :=_dbac [_eeee ];
if len (_eage )==0{_bdcd [_acad ]=nil ;continue ;};_eeeea :=make ([]int ,len (_eage ));_eccga :=0;for _gfbcg :=range _eage {_eeeea [_eccga ]=_gfbcg ;_eccga ++;};_bdcd [_acad ]=_eeeea ;};return _bdcd ;};func (_becab *wordBag )arrangeText ()*textPara {_becab .sort ();
if _ccgd {_becab .removeDuplicates ();};var _aecg []*textLine ;for _ ,_cgfac :=range _becab .depthIndexes (){for !_becab .empty (_cgfac ){_bgdd :=_becab .firstReadingIndex (_cgfac );_gbee :=_becab .firstWord (_bgdd );_aeed :=_aeg (_becab ,_bgdd );_fdec :=_gbee ._ceafb ;
_cfdb :=_gbee ._fecd -_bfgae *_fdec ;_bgfb :=_gbee ._fecd +_bfgae *_fdec ;_gagae :=_cafc *_fdec ;_agfc :=_cef *_fdec ;_fdea :for {var _eecg *textWord ;_eebd :=0;for _ ,_abdaa :=range _becab .depthBand (_cfdb ,_bgfb ){_fggg :=_becab .highestWord (_abdaa ,_cfdb ,_bgfb );
if _fggg ==nil {continue ;};_ecbb :=_ebfe (_fggg ,_aeed ._egcb [len (_aeed ._egcb )-1]);if _ecbb < -_agfc {break _fdea ;};if _ecbb > _gagae {continue ;};if _eecg !=nil &&_dad (_fggg ,_eecg )>=0{continue ;};_eecg =_fggg ;_eebd =_abdaa ;};if _eecg ==nil {break ;
};_aeed .pullWord (_becab ,_eecg ,_eebd );};_aeed .markWordBoundaries ();_aecg =append (_aecg ,_aeed );};};if len (_aecg )==0{return nil ;};_ed .Slice (_aecg ,func (_abead ,_fcaga int )bool {return _bacde (_aecg [_abead ],_aecg [_fcaga ])< 0});_fbffb :=_deegg (_becab .PdfRectangle ,_aecg );
if _effe {_db .Log .Info ("\u0061\u0072\u0072an\u0067\u0065\u0054\u0065\u0078\u0074\u0020\u0021\u0021\u0021\u0020\u0070\u0061\u0072\u0061\u003d\u0025\u0073",_fbffb .String ());if _dfbca {for _cdeb ,_bgeg :=range _fbffb ._ccgcb {_af .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cdeb ,_bgeg .String ());
if _gbda {for _eeab ,_fefdc :=range _bgeg ._egcb {_af .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_eeab ,_fefdc .String ());for _adaec ,_cfbca :=range _fefdc ._dbgad {_af .Printf ("\u00251\u0032\u0064\u003a\u0020\u0025\u0073\n",_adaec ,_cfbca .String ());
};};};};};};return _fbffb ;};func _bafgf (_accee *PageText )error {_abeada :=_bf .GetLicenseKey ();if _abeada !=nil &&_abeada .IsLicensed ()||_df {return nil ;};_af .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");
_af .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 _dd .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 (_ccbd lineRuling )xMean ()float64 {return 0.5*(_ccbd ._gagbg .X +_ccbd ._ggee .X )};
func (_geaa *shapesState )fill (_dcgg *[]pathSection ){_egfg :=pathSection {_gbdd :_geaa ._bcd ,Color :_geaa ._bdb .getFillColor ()};*_dcgg =append (*_dcgg ,_egfg );if _aacf {_caca :=_egfg .bbox ();_af .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 (*_dcgg ),len (_egfg ._gbdd ),_geaa ,_egfg .Color ,_caca ,_caca .Width (),_caca .Height ());
if _abeb {for _fgdd ,_bbag :=range _egfg ._gbdd {_af .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_fgdd ,_bbag );if _fgdd ==10{break ;};};};};};