unipdf/extractor/extractor.go
2021-12-14 01:08:28 +00:00

788 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 (_ca "bytes";_c "errors";_gb "fmt";_bg "github.com/unidoc/unipdf/v3/common";_fc "github.com/unidoc/unipdf/v3/contentstream";_bgf "github.com/unidoc/unipdf/v3/core";_a "github.com/unidoc/unipdf/v3/internal/license";_be "github.com/unidoc/unipdf/v3/internal/textencoding";
_de "github.com/unidoc/unipdf/v3/internal/transform";_ba "github.com/unidoc/unipdf/v3/model";_ed "golang.org/x/text/unicode/norm";_ea "golang.org/x/xerrors";_b "image/color";_d "io";_fd "math";_f "regexp";_gf "sort";_fg "strings";_e "unicode";_cd "unicode/utf8";
);func (_caaab *textLine )bbox ()_ba .PdfRectangle {return _caaab .PdfRectangle };func (_eaa *Extractor )extractPageText (_fad string ,_ecd *_ba .PdfPageResources ,_cccd _de .Matrix ,_fbf int )(*PageText ,int ,int ,error ){_bg .Log .Trace ("\u0065x\u0074\u0072\u0061\u0063t\u0050\u0061\u0067\u0065\u0054e\u0078t\u003a \u006c\u0065\u0076\u0065\u006c\u003d\u0025d",_fbf );
_gge :=&PageText {_gdeg :_eaa ._af };_aca :=_bdee (_eaa ._af );var _gfea stateStack ;_fdd :=_gffa (_eaa ,_ecd ,_fc .GraphicsState {},&_aca ,&_gfea );_ge :=shapesState {_edee :_cccd ,_cca :_de .IdentityMatrix (),_bbf :_fdd };var _edb bool ;if _fbf > _dbg {_egc :=_c .New ("\u0066\u006f\u0072\u006d s\u0074\u0061\u0063\u006b\u0020\u006f\u0076\u0065\u0072\u0066\u006c\u006f\u0077");
_bg .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",_fbf ,_egc );
return _gge ,_aca ._dfc ,_aca ._cbd ,_egc ;};_fbe :=_fc .NewContentStreamParser (_fad );_gfg ,_bca :=_fbe .Parse ();if _bca !=nil {_bg .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",_bca );
return _gge ,_aca ._dfc ,_aca ._cbd ,_bca ;};_df :=_fc .NewContentStreamProcessor (*_gfg );_df .AddHandler (_fc .HandlerConditionEnumAllOperands ,"",func (_fab *_fc .ContentStreamOperation ,_bbd _fc .GraphicsState ,_ggc *_ba .PdfPageResources )error {_gcdb :=_fab .Operand ;
if _ccf {_bg .Log .Info ("\u0026&\u0026\u0020\u006f\u0070\u003d\u0025s",_fab );};switch _gcdb {case "\u0071":if _bgcb {_bg .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_ge ._cca );};_gfea .push (&_aca );case "\u0051":if !_gfea .empty (){_aca =*_gfea .pop ();
};_ge ._cca =_bbd .CTM ;if _bgcb {_bg .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_ge ._cca );};case "\u0042\u0054":if _edb {_bg .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");
_gge ._bef =append (_gge ._bef ,_fdd ._gdf ...);};_edb =true ;_ecc :=_bbd ;_ecc .CTM =_cccd .Mult (_ecc .CTM );_fdd =_gffa (_eaa ,_ggc ,_ecc ,&_aca ,&_gfea );_ge ._bbf =_fdd ;case "\u0045\u0054":if !_edb {_bg .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");
};_edb =false ;_gge ._bef =append (_gge ._bef ,_fdd ._gdf ...);_fdd .reset ();case "\u0054\u002a":_fdd .nextLine ();case "\u0054\u0064":if _bce ,_bed :=_fdd .checkOp (_fab ,2,true );!_bce {_bg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bed );
return _bed ;};_edba ,_ee ,_ddd :=_ccfb (_fab .Params );if _ddd !=nil {return _ddd ;};_fdd .moveText (_edba ,_ee );case "\u0054\u0044":if _debg ,_bba :=_fdd .checkOp (_fab ,2,true );!_debg {_bg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bba );
return _bba ;};_eff ,_dbe ,_abb :=_ccfb (_fab .Params );if _abb !=nil {_bg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_abb );return _abb ;};_fdd .moveTextSetLeading (_eff ,_dbe );case "\u0054\u006a":if _faa ,_bea :=_fdd .checkOp (_fab ,1,true );
!_faa {_bg .Log .Debug ("\u0045\u0052\u0052\u004fR:\u0020\u0054\u006a\u0020\u006f\u0070\u003d\u0025\u0073\u0020\u0065\u0072\u0072\u003d%\u0076",_fab ,_bea );return _bea ;};_daf ,_eb :=_bgf .GetStringBytes (_fab .Params [0]);if !_eb {_bg .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",_fab );
return _bgf .ErrTypeError ;};return _fdd .showText (_daf );case "\u0054\u004a":if _ded ,_aec :=_fdd .checkOp (_fab ,1,true );!_ded {_bg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_aec );return _aec ;
};_fcee ,_gaf :=_bgf .GetArray (_fab .Params [0]);if !_gaf {_bg .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",_fab );
return _bca ;};return _fdd .showTextAdjusted (_fcee );case "\u0027":if _ccb ,_eaf :=_fdd .checkOp (_fab ,1,true );!_ccb {_bg .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0027\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_eaf );return _eaf ;};_ebc ,_gde :=_bgf .GetStringBytes (_fab .Params [0]);
if !_gde {_bg .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",_fab );return _bgf .ErrTypeError ;};_fdd .nextLine ();return _fdd .showText (_ebc );
case "\u0022":if _geb ,_gdg :=_fdd .checkOp (_fab ,3,true );!_geb {_bg .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0022\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gdg );return _gdg ;};_gebe ,_aaab ,_dcd :=_ccfb (_fab .Params [:2]);if _dcd !=nil {return _dcd ;
};_ege ,_dbc :=_bgf .GetStringBytes (_fab .Params [2]);if !_dbc {_bg .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",_fab );
return _bgf .ErrTypeError ;};_fdd .setCharSpacing (_gebe );_fdd .setWordSpacing (_aaab );_fdd .nextLine ();return _fdd .showText (_ege );case "\u0054\u004c":_fdc ,_eccg :=_bad (_fab );if _eccg !=nil {_bg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004c\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_eccg );
return _eccg ;};_fdd .setTextLeading (_fdc );case "\u0054\u0063":_bae ,_fgcc :=_bad (_fab );if _fgcc !=nil {_bg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0063\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fgcc );return _fgcc ;};_fdd .setCharSpacing (_bae );
case "\u0054\u0066":if _eaaa ,_fda :=_fdd .checkOp (_fab ,2,true );!_eaaa {_bg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0066\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fda );return _fda ;};_aea ,_ecce :=_bgf .GetNameVal (_fab .Params [0]);
if !_ecce {_bg .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",_fab );return _bgf .ErrTypeError ;};_cec ,_fgccf :=_bgf .GetNumberAsFloat (_fab .Params [1]);
if !_ecce {_bg .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",_fab ,_fgccf );
return _fgccf ;};_fgccf =_fdd .setFont (_aea ,_cec );_fdd ._cbab =_ea .Is (_fgccf ,_bgf .ErrNotSupported );if _fgccf !=nil &&!_fdd ._cbab {return _fgccf ;};case "\u0054\u006d":if _gbg ,_gca :=_fdd .checkOp (_fab ,6,true );!_gbg {_bg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u006d\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gca );
return _gca ;};_fec ,_gdb :=_bgf .GetNumbersAsFloat (_fab .Params );if _gdb !=nil {_bg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gdb );return _gdb ;};_fdd .setTextMatrix (_fec );case "\u0054\u0072":if _gda ,_gbc :=_fdd .checkOp (_fab ,1,true );
!_gda {_bg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0072\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gbc );return _gbc ;};_cee ,_gfaa :=_bgf .GetIntVal (_fab .Params [0]);if !_gfaa {_bg .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",_fab );
return _bgf .ErrTypeError ;};_fdd .setTextRenderMode (_cee );case "\u0054\u0073":if _aab ,_cad :=_fdd .checkOp (_fab ,1,true );!_aab {_bg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0073\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cad );return _cad ;
};_dgd ,_dae :=_bgf .GetNumberAsFloat (_fab .Params [0]);if _dae !=nil {_bg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_dae );return _dae ;};_fdd .setTextRise (_dgd );case "\u0054\u0077":if _gce ,_gced :=_fdd .checkOp (_fab ,1,true );
!_gce {_bg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gced );return _gced ;};_dbca ,_ggb :=_bgf .GetNumberAsFloat (_fab .Params [0]);if _ggb !=nil {_bg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ggb );
return _ggb ;};_fdd .setWordSpacing (_dbca );case "\u0054\u007a":if _ffa ,_dbce :=_fdd .checkOp (_fab ,1,true );!_ffa {_bg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_dbce );return _dbce ;};_eac ,_dfd :=_bgf .GetNumberAsFloat (_fab .Params [0]);
if _dfd !=nil {_bg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_dfd );return _dfd ;};_fdd .setHorizScaling (_eac );case "\u0063\u006d":_ge ._cca =_bbd .CTM ;if _ge ._cca .Singular (){_gcg :=_de .IdentityMatrix ().Translate (_ge ._cca .Translation ());
_bg .Log .Debug ("S\u0069n\u0067\u0075\u006c\u0061\u0072\u0020\u0063\u0074m\u003d\u0025\u0073\u2192%s",_ge ._cca ,_gcg );_ge ._cca =_gcg ;};if _bgcb {_bg .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_ge ._cca );};case "\u006d":if len (_fab .Params )!=2{_bg .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",_ef );
return nil ;};_cace ,_agg :=_bgf .GetNumbersAsFloat (_fab .Params );if _agg !=nil {return _agg ;};_ge .moveTo (_cace [0],_cace [1]);case "\u006c":if len (_fab .Params )!=2{_bg .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",_ef );
return nil ;};_gfag ,_bacg :=_bgf .GetNumbersAsFloat (_fab .Params );if _bacg !=nil {return _bacg ;};_ge .lineTo (_gfag [0],_gfag [1]);case "\u0063":if len (_fab .Params )!=6{return _ef ;};_gdgf ,_ecf :=_bgf .GetNumbersAsFloat (_fab .Params );if _ecf !=nil {return _ecf ;
};_bg .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_gdgf );_ge .cubicTo (_gdgf [0],_gdgf [1],_gdgf [2],_gdgf [3],_gdgf [4],_gdgf [5]);case "\u0076","\u0079":if len (_fab .Params )!=4{return _ef ;
};_bda ,_bec :=_bgf .GetNumbersAsFloat (_fab .Params );if _bec !=nil {return _bec ;};_bg .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_bda );_ge .quadraticTo (_bda [0],_bda [1],_bda [2],_bda [3]);
case "\u0068":_ge .closePath ();case "\u0072\u0065":if len (_fab .Params )!=4{return _ef ;};_ebca ,_fabe :=_bgf .GetNumbersAsFloat (_fab .Params );if _fabe !=nil {return _fabe ;};_ge .drawRectangle (_ebca [0],_ebca [1],_ebca [2],_ebca [3]);_ge .closePath ();
case "\u0053":_ge .stroke (&_gge ._eebe );_ge .clearPath ();case "\u0073":_ge .closePath ();_ge .stroke (&_gge ._eebe );_ge .clearPath ();case "\u0046":_ge .fill (&_gge ._bbb );_ge .clearPath ();case "\u0066","\u0066\u002a":_ge .closePath ();_ge .fill (&_gge ._bbb );
_ge .clearPath ();case "\u0042","\u0042\u002a":_ge .fill (&_gge ._bbb );_ge .stroke (&_gge ._eebe );_ge .clearPath ();case "\u0062","\u0062\u002a":_ge .closePath ();_ge .fill (&_gge ._bbb );_ge .stroke (&_gge ._eebe );_ge .clearPath ();case "\u006e":_ge .clearPath ();
case "\u0044\u006f":if len (_fab .Params )==0{_bg .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",_fab .Params );
return _bgf .ErrRangeError ;};_cba ,_ggd :=_bgf .GetName (_fab .Params [0]);if !_ggd {_bg .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",_fab .Params [0]);
return _bgf .ErrTypeError ;};_ ,_eaaab :=_ggc .GetXObjectByName (*_cba );if _eaaab !=_ba .XObjectTypeForm {break ;};_ffd ,_ggd :=_eaa ._fa [_cba .String ()];if !_ggd {_ffbf ,_gcb :=_ggc .GetXObjectFormByName (*_cba );if _gcb !=nil {_bg .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_gcb );
return _gcb ;};_ffe ,_gcb :=_ffbf .GetContentStream ();if _gcb !=nil {_bg .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_gcb );return _gcb ;};_beb :=_ffbf .Resources ;if _beb ==nil {_beb =_ggc ;};_bag ,_agc ,_aeg ,_gcb :=_eaa .extractPageText (string (_ffe ),_beb ,_cccd .Mult (_bbd .CTM ),_fbf +1);
if _gcb !=nil {_bg .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_gcb );return _gcb ;};_ffd =textResult {*_bag ,_agc ,_aeg };_eaa ._fa [_cba .String ()]=_ffd ;};_ge ._cca =_bbd .CTM ;if _bgcb {_bg .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_ge ._cca );
};_gge ._bef =append (_gge ._bef ,_ffd ._bcb ._bef ...);_gge ._eebe =append (_gge ._eebe ,_ffd ._bcb ._eebe ...);_gge ._bbb =append (_gge ._bbb ,_ffd ._bcb ._bbb ...);_aca ._dfc +=_ffd ._gfga ;_aca ._cbd +=_ffd ._fbg ;case "\u0072\u0067","\u0067","\u006b","\u0063\u0073","\u0073\u0063","\u0073\u0063\u006e":_fdd ._ade .ColorspaceNonStroking =_bbd .ColorspaceNonStroking ;
_fdd ._ade .ColorNonStroking =_bbd .ColorNonStroking ;case "\u0052\u0047","\u0047","\u004b","\u0043\u0053","\u0053\u0043","\u0053\u0043\u004e":_fdd ._ade .ColorspaceStroking =_bbd .ColorspaceStroking ;_fdd ._ade .ColorStroking =_bbd .ColorStroking ;};return nil ;
});_bca =_df .Process (_ecd );return _gge ,_aca ._dfc ,_aca ._cbd ,_bca ;};func _fged (_cbea map[int ][]float64 )[]int {_bdcb :=make ([]int ,len (_cbea ));_fdfbc :=0;for _dfgf :=range _cbea {_bdcb [_fdfbc ]=_dfgf ;_fdfbc ++;};_gf .Ints (_bdcb );return _bdcb ;
};func (_ddda *subpath )last ()_de .Point {return _ddda ._cgf [len (_ddda ._cgf )-1]};func _facg (_ddbd *textWord ,_gfgc float64 ,_ddcf ,_fccec rulingList )*wordBag {_dcgc :=_ggde (_ddbd ._cgcc );_daed :=[]*textWord {_ddbd };_fddea :=wordBag {_ffde :map[int ][]*textWord {_dcgc :_daed },PdfRectangle :_ddbd .PdfRectangle ,_dgbc :_ddbd ._abac ,_cfg :_gfgc ,_cead :_ddcf ,_bdff :_fccec };
return &_fddea ;};func (_fggd *textTable )growTable (){_fdfa :=func (_cegda paraList ){_fggd ._deee ++;for _cacf :=0;_cacf < _fggd ._eebbe ;_cacf ++{_dcgcg :=_cegda [_cacf ];_fggd .put (_cacf ,_fggd ._deee -1,_dcgcg );};};_fadge :=func (_gaffa paraList ){_fggd ._eebbe ++;
for _gbdeb :=0;_gbdeb < _fggd ._deee ;_gbdeb ++{_dgcg :=_gaffa [_gbdeb ];_fggd .put (_fggd ._eebbe -1,_gbdeb ,_dgcg );};};if _eged {_fggd .log ("\u0067r\u006f\u0077\u0054\u0061\u0062\u006ce");};for _gfgg :=0;;_gfgg ++{_ffdb :=false ;_bcef :=_fggd .getDown ();
_bcdfg :=_fggd .getRight ();if _eged {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gfgg ,_fggd );_gb .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0020\u0064\u006f\u0077\u006e\u003d\u0025\u0073\u000a",_bcef );_gb .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0072\u0069\u0067\u0068\u0074\u003d\u0025\u0073\u000a",_bcdfg );
};if _bcef !=nil &&_bcdfg !=nil {_fcfee :=_bcef [len (_bcef )-1];if !_fcfee .taken ()&&_fcfee ==_bcdfg [len (_bcdfg )-1]{_fdfa (_bcef );if _bcdfg =_fggd .getRight ();_bcdfg !=nil {_fadge (_bcdfg );_fggd .put (_fggd ._eebbe -1,_fggd ._deee -1,_fcfee );};
_ffdb =true ;};};if !_ffdb &&_bcef !=nil {_fdfa (_bcef );_ffdb =true ;};if !_ffdb &&_bcdfg !=nil {_fadge (_bcdfg );_ffdb =true ;};if !_ffdb {break ;};};};func _bece (_edg func (*wordBag ,*textWord ,float64 )bool ,_geag float64 )func (*wordBag ,*textWord )bool {return func (_bbbg *wordBag ,_cff *textWord )bool {return _edg (_bbbg ,_cff ,_geag )};
};func (_bcfg paraList )xNeighbours (_efbda float64 )map[*textPara ][]int {_cabb :=make ([]event ,2*len (_bcfg ));if _efbda ==0{for _egba ,_fafc :=range _bcfg {_cabb [2*_egba ]=event {_fafc .Llx ,true ,_egba };_cabb [2*_egba +1]=event {_fafc .Urx ,false ,_egba };
};}else {for _cbdce ,_debbg :=range _bcfg {_cabb [2*_cbdce ]=event {_debbg .Llx -_efbda *_debbg .fontsize (),true ,_cbdce };_cabb [2*_cbdce +1]=event {_debbg .Urx +_efbda *_debbg .fontsize (),false ,_cbdce };};};return _bcfg .eventNeighbours (_cabb );};
func (_cfc *textObject )getCurrentFont ()*_ba .PdfFont {_bcc :=_cfc ._ggec ._fea ;if _bcc ==nil {_bg .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 _ba .DefaultFont ();};return _bcc ;};func (_eab *textObject )setFont (_bbg string ,_bgg float64 )error {if _eab ==nil {return nil ;};_eab ._ggec ._cabe =_bgg ;_bde ,_gbgcg :=_eab .getFont (_bbg );if _gbgcg !=nil {return _gbgcg ;};_eab ._ggec ._fea =_bde ;
return nil ;};type pathSection struct{_aead []*subpath ;_b .Color ;};func (_cdee *shapesState )cubicTo (_fcbg ,_gadf ,_dbfc ,_eead ,_gbfb ,_ggfd float64 ){if _bgcb {_bg .Log .Info ("\u0063\u0075\u0062\u0069\u0063\u0054\u006f\u003a");};_cdee .addPoint (_gbfb ,_ggfd );
};
// String returns a string describing `ma`.
func (_aae TextMarkArray )String ()string {_gbd :=len (_aae ._bdf );if _gbd ==0{return "\u0045\u004d\u0050T\u0059";};_ceag :=_aae ._bdf [0];_gab :=_aae ._bdf [_gbd -1];return _gb .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",_gbd ,_ceag ,_gab );
};func (_bfgde *textTable )getComposite (_gfdce ,_defe int )(paraList ,_ba .PdfRectangle ){_ffbgd ,_cdacc :=_bfgde ._gag [_fgef (_gfdce ,_defe )];if _bega {_gb .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",_gfdce ,_defe ,_ffbgd .String ());
};if !_cdacc {return nil ,_ba .PdfRectangle {};};return _ffbgd .parasBBox ();};func _ffag (_adce []*textMark ,_dbbc _ba .PdfRectangle ,_bbef rulingList ,_gfbc []gridTiling )paraList {_bg .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 (_adce ),_dbbc );
if len (_adce )==0{return nil ;};_eeda :=_cfbab (_adce ,_dbbc );if len (_eeda )==0{return nil ;};_bbef .log ("\u006d\u0061\u006be\u0054\u0065\u0078\u0074\u0050\u0061\u0067\u0065");_bgff ,_cegf :=_bbef .vertsHorzs ();_efdf :=_aded (_eeda ,_dbbc .Ury ,_bgff ,_cegf );
_adg :=_bdacc (_efdf ,_dbbc .Ury ,_bgff ,_cegf );_adg =_fbdgg (_adg );_fcagg :=make (paraList ,0,len (_adg ));for _ ,_eafb :=range _adg {_fcfe :=_eafb .arrangeText ();if _fcfe !=nil {_fcagg =append (_fcagg ,_fcfe );};};if len (_fcagg )>=_cbabb {_fcagg =_fcagg .extractTables (_gfbc );
};_fcagg .sortReadingOrder ();_fcagg .log ("\u0073\u006f\u0072te\u0064\u0020\u0069\u006e\u0020\u0072\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u006f\u0072\u0064\u0065\u0072");return _fcagg ;};type rulingList []*ruling ;func (_eccb *textObject )setTextMatrix (_fae []float64 ){if len (_fae )!=6{_bg .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u006c\u0065\u006e\u0028\u0066\u0029\u0020\u0021\u003d\u0020\u0036\u0020\u0028\u0025\u0064\u0029",len (_fae ));
return ;};_ad ,_gec ,_ead ,_edde ,_ecdf ,_efcg :=_fae [0],_fae [1],_fae [2],_fae [3],_fae [4],_fae [5];_eccb ._bedc =_de .NewMatrix (_ad ,_gec ,_ead ,_edde ,_ecdf ,_efcg );_eccb ._aac =_eccb ._bedc ;};func (_cgeg *subpath )isQuadrilateral ()bool {if len (_cgeg ._cgf )< 4||len (_cgeg ._cgf )> 5{return false ;
};if len (_cgeg ._cgf )==5{_fcafe :=_cgeg ._cgf [0];_dcfa :=_cgeg ._cgf [4];if _fcafe .X !=_dcfa .X ||_fcafe .Y !=_dcfa .Y {return false ;};};return true ;};func _cdeecb (_eeca map[float64 ]map[float64 ]gridTile )[]float64 {_bafgg :=make ([]float64 ,0,len (_eeca ));
for _fbcgd :=range _eeca {_bafgg =append (_bafgg ,_fbcgd );};_gf .Float64s (_bafgg );_abfe :=len (_bafgg );for _bgdf :=0;_bgdf < _abfe /2;_bgdf ++{_bafgg [_bgdf ],_bafgg [_abfe -1-_bgdf ]=_bafgg [_abfe -1-_bgdf ],_bafgg [_bgdf ];};return _bafgg ;};func _gebfd (_gfaaf ,_gafeb ,_fdbc float64 )rulingKind {if _gfaaf >=_fdbc &&_dead (_gafeb ,_gfaaf ){return _ced ;
};if _gafeb >=_fdbc &&_dead (_gfaaf ,_gafeb ){return _aba ;};return _fdfb ;};func (_cbcb *subpath )makeRectRuling (_gccc _b .Color )(*ruling ,bool ){if _aggg {_bg .Log .Info ("\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0070\u0061\u0074\u0068\u003d\u0025\u0076",_cbcb );
};_dgfd :=_cbcb ._cgf [:4];_addb :=make (map[int ]rulingKind ,len (_dgfd ));for _fdaab ,_cffec :=range _dgfd {_bffe :=_cbcb ._cgf [(_fdaab +1)%4];_addb [_fdaab ]=_abed (_cffec ,_bffe );if _aggg {_gb .Printf ("\u0025\u0034\u0064: \u0025\u0073\u0020\u003d\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u002d\u0020\u0025\u0036\u002e\u0032\u0066",_fdaab ,_addb [_fdaab ],_cffec ,_bffe );
};};if _aggg {_gb .Printf ("\u0020\u0020\u0020\u006b\u0069\u006e\u0064\u0073\u003d\u0025\u002b\u0076\u000a",_addb );};var _ggcc ,_degf []int ;for _abgc ,_edaa :=range _addb {switch _edaa {case _ced :_degf =append (_degf ,_abgc );case _aba :_ggcc =append (_ggcc ,_abgc );
};};if _aggg {_gb .Printf ("\u0020\u0020 \u0068\u006f\u0072z\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_degf ),_degf );_gb .Printf ("\u0020\u0020 \u0076\u0065\u0072t\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_ggcc ),_ggcc );
};_cdd :=(len (_degf )==2&&len (_ggcc )==2)||(len (_degf )==2&&len (_ggcc )==0&&_deaag (_dgfd [_degf [0]],_dgfd [_degf [1]]))||(len (_ggcc )==2&&len (_degf )==0&&_accd (_dgfd [_ggcc [0]],_dgfd [_ggcc [1]]));if _aggg {_gb .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_degf ),len (_ggcc ),_cdd );
};if !_cdd {if _aggg {_bg .Log .Error ("\u0021!\u006d\u0061\u006b\u0065R\u0065\u0063\u0074\u0052\u0075l\u0069n\u0067:\u0020\u0070\u0061\u0074\u0068\u003d\u0025v",_cbcb );_gb .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_degf ),len (_ggcc ),_cdd );
};return &ruling {},false ;};if len (_ggcc )==0{for _gbeg ,_adff :=range _addb {if _adff !=_ced {_ggcc =append (_ggcc ,_gbeg );};};};if len (_degf )==0{for _dbeaf ,_abdc :=range _addb {if _abdc !=_aba {_degf =append (_degf ,_dbeaf );};};};if _aggg {_bg .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 (_degf ),len (_ggcc ),len (_dgfd ),_degf ,_ggcc ,_dgfd );
};var _gdac ,_cadb ,_baaf ,_adbc _de .Point ;if _dgfd [_degf [0]].Y > _dgfd [_degf [1]].Y {_baaf ,_adbc =_dgfd [_degf [0]],_dgfd [_degf [1]];}else {_baaf ,_adbc =_dgfd [_degf [1]],_dgfd [_degf [0]];};if _dgfd [_ggcc [0]].X > _dgfd [_ggcc [1]].X {_gdac ,_cadb =_dgfd [_ggcc [0]],_dgfd [_ggcc [1]];
}else {_gdac ,_cadb =_dgfd [_ggcc [1]],_dgfd [_ggcc [0]];};_bfef :=_ba .PdfRectangle {Llx :_gdac .X ,Urx :_cadb .X ,Lly :_adbc .Y ,Ury :_baaf .Y };if _bfef .Llx > _bfef .Urx {_bfef .Llx ,_bfef .Urx =_bfef .Urx ,_bfef .Llx ;};if _bfef .Lly > _bfef .Ury {_bfef .Lly ,_bfef .Ury =_bfef .Ury ,_bfef .Lly ;
};_deed :=rectRuling {PdfRectangle :_bfef ,_eabda :_acggg (_bfef ),Color :_gccc };if _deed ._eabda ==_fdfb {if _aggg {_bg .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 ;};_bfacf ,_fgbg :=_deed .asRuling ();if !_fgbg {if _aggg {_bg .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 _egg {_gb .Printf ("\u0020\u0020\u0020\u0072\u003d\u0025\u0073\u000a",_bfacf .String ());
};return _bfacf ,true ;};func _aaca (_gedg _ba .PdfRectangle ,_cbca []*textLine )*textPara {return &textPara {PdfRectangle :_gedg ,_abdg :_cbca };};type paraList []*textPara ;func _ffdc (_gecc ,_acad float64 )string {_gfeac :=!_edbbc (_gecc -_acad );if _gfeac {return "\u000a";
};return "\u0020";};func (_cgg *textObject )setTextLeading (_cbf float64 ){if _cgg ==nil {return ;};_cgg ._ggec ._aaf =_cbf ;};
// Len returns the number of TextMarks in `ma`.
func (_cabfa *TextMarkArray )Len ()int {if _cabfa ==nil {return 0;};return len (_cabfa ._bdf );};
// NewFromContents creates a new extractor from contents and page resources.
func NewFromContents (contents string ,resources *_ba .PdfPageResources )(*Extractor ,error ){const _gg ="\u0065x\u0074\u0072\u0061\u0063t\u006f\u0072\u002e\u004e\u0065w\u0046r\u006fm\u0043\u006f\u006e\u0074\u0065\u006e\u0074s";_fdg :=&Extractor {_eg :contents ,_gc :resources ,_ac :map[string ]fontEntry {},_fa :map[string ]textResult {}};
_a .TrackUse (_gg );return _fdg ,nil ;};
// Marks returns the TextMark collection for a page. It represents all the text on the page.
func (_aeff PageText )Marks ()*TextMarkArray {return &TextMarkArray {_bdf :_aeff ._ffbe }};func _gcae (_bbgc string )string {_aacd :=[]rune (_bbgc );return string (_aacd [:len (_aacd )-1])};
// BBox returns the smallest axis-aligned rectangle that encloses all the TextMarks in `ma`.
func (_eece *TextMarkArray )BBox ()(_ba .PdfRectangle ,bool ){var _baec _ba .PdfRectangle ;_acda :=false ;for _ ,_ffacg :=range _eece ._bdf {if _ffacg .Meta ||_fcfbc (_ffacg .Text ){continue ;};if _acda {_baec =_abe (_baec ,_ffacg .BBox );}else {_baec =_ffacg .BBox ;
_acda =true ;};};return _baec ,_acda ;};func (_egde *textObject )moveLP (_bbc ,_ceeg float64 ){_egde ._aac .Concat (_de .NewMatrix (1,0,0,1,_bbc ,_ceeg ));_egde ._bedc =_egde ._aac ;};func (_baa *textObject )checkOp (_ace *_fc .ContentStreamOperation ,_dcdd int ,_dac bool )(_ebcd bool ,_gcc error ){if _baa ==nil {var _gae []_bgf .PdfObject ;
if _dcdd > 0{_gae =_ace .Params ;if len (_gae )> _dcdd {_gae =_gae [:_dcdd ];};};_bg .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",_ace .Operand ,_gae );
};if _dcdd >=0{if len (_ace .Params )!=_dcdd {if _dac {_gcc =_c .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");};_bg .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 ,_dcdd ,len (_ace .Params ),_ace .Params );
return false ,_gcc ;};};return true ,nil ;};func _ggde (_feba float64 )int {var _fbeb int ;if _feba >=0{_fbeb =int (_feba /_bfd );}else {_fbeb =int (_feba /_bfd )-1;};return _fbeb ;};type textObject struct{_aed *Extractor ;_afbe *_ba .PdfPageResources ;
_ade _fc .GraphicsState ;_ggec *textState ;_fgfa *stateStack ;_bedc _de .Matrix ;_aac _de .Matrix ;_gdf []*textMark ;_cbab bool ;};type event struct{_egbe float64 ;_dfac bool ;_fgccb int ;};func (_adgcbf *textTable )reduce ()*textTable {_aacee :=make ([]int ,0,_adgcbf ._deee );
_ccde :=make ([]int ,0,_adgcbf ._eebbe );for _cdac :=0;_cdac < _adgcbf ._deee ;_cdac ++{if !_adgcbf .emptyCompositeRow (_cdac ){_aacee =append (_aacee ,_cdac );};};for _begec :=0;_begec < _adgcbf ._eebbe ;_begec ++{if !_adgcbf .emptyCompositeColumn (_begec ){_ccde =append (_ccde ,_begec );
};};if len (_aacee )==_adgcbf ._deee &&len (_ccde )==_adgcbf ._eebbe {return _adgcbf ;};_ffad :=textTable {_dbaada :_adgcbf ._dbaada ,_eebbe :len (_ccde ),_deee :len (_aacee ),_aagbe :make (map[uint64 ]*textPara ,len (_ccde )*len (_aacee ))};if _bega {_bg .Log .Info ("\u0072\u0065\u0064\u0075ce\u003a\u0020\u0025\u0064\u0078\u0025\u0064\u0020\u002d\u003e\u0020\u0025\u0064\u0078%\u0064",_adgcbf ._eebbe ,_adgcbf ._deee ,len (_ccde ),len (_aacee ));
_bg .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_ccde );_bg .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_aacee );};for _ggcbab ,_aefcg :=range _aacee {for _cccf ,_ggdba :=range _ccde {_agca ,_adbe :=_adgcbf .getComposite (_ggdba ,_aefcg );
if _agca ==nil {continue ;};if _bega {_gb .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_cccf ,_ggcbab ,_ggdba ,_aefcg ,_eedbc (_agca .merge ().text (),50));};_ffad .putComposite (_cccf ,_ggcbab ,_agca ,_adbe );
};};return &_ffad ;};func (_abba *shapesState )addPoint (_fagb ,_bgca float64 ){_ddad :=_abba .establishSubpath ();_gbeb :=_abba .devicePoint (_fagb ,_bgca );if _ddad ==nil {_abba ._ccbf =true ;_abba ._ccee =_gbeb ;}else {_ddad .add (_gbeb );};};func (_eeedc compositeCell )hasLines (_gabc []*textLine )bool {for _bgfba ,_dfgg :=range _gabc {_bddec :=_ceea (_eeedc .PdfRectangle ,_dfgg .PdfRectangle );
if _bega {_gb .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",_bddec ,_bgfba ,len (_gabc ));_gb .Printf ("\u0020\u0020\u0020\u0020 \u005e\u005e\u005e\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u003d\u0025s\u000a",_eeedc );
_gb .Printf ("\u0020 \u0020 \u0020\u0020\u0020\u006c\u0069\u006e\u0065\u003d\u0025\u0073\u000a",_dfgg );};if _bddec {return true ;};};return false ;};func _bfecc (_edff int ,_debec func (int ,int )bool )[]int {_gbge :=make ([]int ,_edff );for _eafe :=range _gbge {_gbge [_eafe ]=_eafe ;
};_gf .Slice (_gbge ,func (_gbgef ,_gbaag int )bool {return _debec (_gbge [_gbgef ],_gbge [_gbaag ])});return _gbge ;};func (_ggdb *wordBag )depthBand (_cbcfa ,_fgca float64 )[]int {if len (_ggdb ._ffde )==0{return nil ;};return _ggdb .depthRange (_ggdb .getDepthIdx (_cbcfa ),_ggdb .getDepthIdx (_fgca ));
};func (_ggegd *wordBag )empty (_fcbf int )bool {_ ,_fgccd :=_ggegd ._ffde [_fcbf ];return !_fgccd };func (_gbgc *textObject )moveText (_fddg ,_acc float64 ){_gbgc .moveLP (_fddg ,_acc )};func (_bbbd *textTable )compositeColCorridors ()map[int ][]float64 {_aefg :=make (map[int ][]float64 ,_bbbd ._eebbe );
if _bega {_bg .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",_bbbd ._eebbe );};for _adcdc :=0;_adcdc < _bbbd ._eebbe ;_adcdc ++{_aefg [_adcdc ]=nil ;
};return _aefg ;};type textTable struct{_ba .PdfRectangle ;_eebbe ,_deee int ;_dbaada bool ;_aagbe map[uint64 ]*textPara ;_gag map[uint64 ]compositeCell ;};func (_feag *PageText )computeViews (){var _dgfa rulingList ;if _caaa {_fcce :=_gbgg (_feag ._eebe );
_dgfa =append (_dgfa ,_fcce ...);};if _dadg {_ffea :=_febc (_feag ._bbb );_dgfa =append (_dgfa ,_ffea ...);};_dgfa ,_gcad :=_dgfa .toTilings ();var _cfeg paraList ;_cafd :=len (_feag ._bef );for _abge :=0;_abge < 360&&_cafd > 0;_abge +=90{_cge :=make ([]*textMark ,0,len (_feag ._bef )-_cafd );
for _ ,_fade :=range _feag ._bef {if _fade ._cffe ==_abge {_cge =append (_cge ,_fade );};};if len (_cge )> 0{_deff :=_ffag (_cge ,_feag ._gdeg ,_dgfa ,_gcad );_cfeg =append (_cfeg ,_deff ...);_cafd -=len (_cge );};};_cef :=new (_ca .Buffer );_cfeg .writeText (_cef );
_feag ._efcd =_cef .String ();_feag ._ffbe =_cfeg .toTextMarks ();_feag ._aeac =_cfeg .tables ();if _bega {_bg .Log .Info ("\u0063\u006f\u006dpu\u0074\u0065\u0056\u0069\u0065\u0077\u0073\u003a\u0020\u0074\u0061\u0062\u006c\u0065\u0073\u003d\u0025\u0064",len (_feag ._aeac ));
};};type gridTiling struct{_ba .PdfRectangle ;_abgd []float64 ;_gbdg []float64 ;_cfbe map[float64 ]map[float64 ]gridTile ;};func (_dacb *shapesState )establishSubpath ()*subpath {_dag ,_faf :=_dacb .lastpointEstablished ();if !_faf {_dacb ._afab =append (_dacb ._afab ,_dec (_dag ));
};if len (_dacb ._afab )==0{return nil ;};_dacb ._ccbf =false ;return _dacb ._afab [len (_dacb ._afab )-1];};func (_fbag *textTable )log (_bgea string ){if !_bega {return ;};_bg .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",_bgea ,_fbag ._eebbe ,_fbag ._deee ,_fbag ._dbaada ,_fbag .PdfRectangle );
for _abeac :=0;_abeac < _fbag ._deee ;_abeac ++{for _bgfad :=0;_bgfad < _fbag ._eebbe ;_bgfad ++{_aece :=_fbag .get (_bgfad ,_abeac );if _aece ==nil {continue ;};_gb .Printf ("%\u0034\u0064\u0020\u00252d\u003a \u0025\u0036\u002e\u0032\u0066 \u0025\u0071\u0020\u0025\u0064\u000a",_bgfad ,_abeac ,_aece .PdfRectangle ,_eedbc (_aece .text (),50),_cd .RuneCountInString (_aece .text ()));
};};};func _edge (_gdfc ,_gebcg _de .Point ,_gcdff _b .Color )(*ruling ,bool ){_gfef :=lineRuling {_cbac :_gdfc ,_aeaaf :_gebcg ,_gddbb :_agggf (_gdfc ,_gebcg ),Color :_gcdff };if _gfef ._gddbb ==_fdfb {return nil ,false ;};return _gfef .asRuling ();};
const (_fdfb rulingKind =iota ;_ced ;_aba ;);func (_aad *textObject )moveTextSetLeading (_gff ,_fecf float64 ){_aad ._ggec ._aaf =-_fecf ;_aad .moveLP (_gff ,_fecf );};
// 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 ;};type fontEntry struct{_fefd *_ba .PdfFont ;_eda int64 ;};func (_deaad gridTile )contains (_cbaba _ba .PdfRectangle )bool {if _deaad .numBorders ()< 3{return false ;};if _deaad ._effc &&_cbaba .Llx < _deaad .Llx -_egad {return false ;
};if _deaad ._cbgf &&_cbaba .Urx > _deaad .Urx +_egad {return false ;};if _deaad ._ebgg &&_cbaba .Lly < _deaad .Lly -_egad {return false ;};if _deaad ._ggbd &&_cbaba .Ury > _deaad .Ury +_egad {return false ;};return true ;};func (_degd compositeCell )String ()string {_decbc :="";
if len (_degd .paraList )> 0{_decbc =_eedbc (_degd .paraList .merge ().text (),50);};return _gb .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0070\u0061\u0072a\u0073\u0020\u0025\u0071",_degd .PdfRectangle ,len (_degd .paraList ),_decbc );
};func _agggf (_gdcd ,_bbdg _de .Point )rulingKind {_fggb :=_fd .Abs (_gdcd .X -_bbdg .X );_cfegg :=_fd .Abs (_gdcd .Y -_bbdg .Y );return _gebfd (_fggb ,_cfegg ,_eaggg );};func _cfab (_bbdc *wordBag ,_baga *textWord ,_cda float64 )bool {return _baga .Llx < _bbdc .Urx +_cda &&_bbdc .Llx -_cda < _baga .Urx ;
};func _accd (_ccce ,_gcag _de .Point )bool {_fadg :=_fd .Abs (_ccce .X -_gcag .X );_fbgde :=_fd .Abs (_ccce .Y -_gcag .Y );return _dead (_fadg ,_fbgde );};type textLine struct{_ba .PdfRectangle ;_bgb float64 ;_eacc []*textWord ;_bcca float64 ;};func (_edaef *textPara )toTextMarks (_eecf *int )[]TextMark {if _edaef ._gddb ==nil {return _edaef .toCellTextMarks (_eecf );
};var _dbaf []TextMark ;for _edbd :=0;_edbd < _edaef ._gddb ._deee ;_edbd ++{for _cgfd :=0;_cgfd < _edaef ._gddb ._eebbe ;_cgfd ++{_gebf :=_edaef ._gddb .get (_cgfd ,_edbd );if _gebf ==nil {_dbaf =_bacfb (_dbaf ,_eecf ,"\u0009");}else {_abdb :=_gebf .toCellTextMarks (_eecf );
_dbaf =append (_dbaf ,_abdb ...);};_dbaf =_bacfb (_dbaf ,_eecf ,"\u0020");};if _edbd < _edaef ._gddb ._deee -1{_dbaf =_bacfb (_dbaf ,_eecf ,"\u000a");};};return _dbaf ;};func _defbc (_cgfaa []TextMark ,_dfg *int )[]TextMark {_cfca :=_cgfaa [len (_cgfaa )-1];
_edccg :=[]rune (_cfca .Text );if len (_edccg )==1{_cgfaa =_cgfaa [:len (_cgfaa )-1];_cfac :=_cgfaa [len (_cgfaa )-1];*_dfg =_cfac .Offset +len (_cfac .Text );}else {_gaef :=_gcae (_cfca .Text );*_dfg +=len (_gaef )-len (_cfca .Text );_cfca .Text =_gaef ;
};return _cgfaa ;};func _cdcb (_dcgdg ,_dfba _ba .PdfRectangle )(_ba .PdfRectangle ,bool ){if !_ceea (_dcgdg ,_dfba ){return _ba .PdfRectangle {},false ;};return _ba .PdfRectangle {Llx :_fd .Max (_dcgdg .Llx ,_dfba .Llx ),Urx :_fd .Min (_dcgdg .Urx ,_dfba .Urx ),Lly :_fd .Max (_dcgdg .Lly ,_dfba .Lly ),Ury :_fd .Min (_dcgdg .Ury ,_dfba .Ury )},true ;
};func (_ccdf rulingList )aligned ()bool {if len (_ccdf )< 2{return false ;};_geab :=make (map[*ruling ]int );_geab [_ccdf [0]]=0;for _ ,_ggae :=range _ccdf [1:]{_dacbb :=false ;for _cegeg :=range _geab {if _ggae .gridIntersecting (_cegeg ){_geab [_cegeg ]++;
_dacbb =true ;break ;};};if !_dacbb {_geab [_ggae ]=0;};};_affd :=0;for _ ,_dbag :=range _geab {if _dbag ==0{_affd ++;};};_cfbd :=float64 (_affd )/float64 (len (_ccdf ));_ebag :=_cfbd <=1.0-_dddac ;if _egg {_bg .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",_ebag ,_cfbd ,_affd ,len (_ccdf ),_ccdf .String ());
};return _ebag ;};func (_gedga *ruling )alignsSec (_gbcg *ruling )bool {const _eagd =_dgfe +1.0;return _gedga ._fdagf -_eagd <=_gbcg ._egag &&_gbcg ._fdagf -_eagd <=_gedga ._egag ;};func (_cdgg *compositeCell )updateBBox (){for _ ,_gceg :=range _cdgg .paraList {_cdgg .PdfRectangle =_abe (_cdgg .PdfRectangle ,_gceg .PdfRectangle );
};};func (_aaafa *wordBag )depthIndexes ()[]int {if len (_aaafa ._ffde )==0{return nil ;};_fee :=make ([]int ,len (_aaafa ._ffde ));_adfe :=0;for _dab :=range _aaafa ._ffde {_fee [_adfe ]=_dab ;_adfe ++;};_gf .Ints (_fee );return _fee ;};func (_begdd rulingList )mergePrimary ()float64 {_ecbfe :=_begdd [0]._feccd ;
for _ ,_cfbdc :=range _begdd [1:]{_ecbfe +=_cfbdc ._feccd ;};return _ecbfe /float64 (len (_begdd ));};func (_fggf *textTable )compositeRowCorridors ()map[int ][]float64 {_efdc :=make (map[int ][]float64 ,_fggf ._deee );if _bega {_bg .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",_fggf ._deee );
};for _edaag :=1;_edaag < _fggf ._deee ;_edaag ++{var _accfd []compositeCell ;for _ecaa :=0;_ecaa < _fggf ._eebbe ;_ecaa ++{if _debag ,_ebeca :=_fggf ._gag [_fgef (_ecaa ,_edaag )];_ebeca {_accfd =append (_accfd ,_debag );};};if len (_accfd )==0{continue ;
};_cfacf :=_aegg (_accfd );_efdc [_edaag ]=_cfacf ;if _bega {_gb .Printf ("\u0020\u0020\u0020\u0025\u0032\u0064\u003a\u0020\u00256\u002e\u0032\u0066\u000a",_edaag ,_cfacf );};};return _efdc ;};func (_cgdc paraList )findTableGrid (_gcfcf gridTiling )(*textTable ,map[*textPara ]struct{}){_cced :=len (_gcfcf ._abgd );
_daba :=len (_gcfcf ._gbdg );_fccf :=textTable {_dbaada :true ,_eebbe :_cced ,_deee :_daba ,_aagbe :make (map[uint64 ]*textPara ,_cced *_daba ),_gag :make (map[uint64 ]compositeCell ,_cced *_daba )};_cdbcb :=make (map[*textPara ]struct{});_acdae :=int ((1.0-_fceaf )*float64 (_cced *_daba ));
_bdbe :=0;if _fcgd {_bg .Log .Info ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0047\u0072\u0069\u0064\u003a\u0020\u0025\u0064\u0020\u0078\u0020%\u0064",_cced ,_daba );};for _cbcgg ,_ggfb :=range _gcfcf ._gbdg {_dcdba ,_fadb :=_gcfcf ._cfbe [_ggfb ];
if !_fadb {continue ;};for _gcfcb ,_cbfga :=range _gcfcf ._abgd {_ffae ,_eecgc :=_dcdba [_cbfga ];if !_eecgc {continue ;};_ebab :=_cgdc .inTile (_ffae );if len (_ebab )==0{_bdbe ++;if _bdbe > _acdae {if _fcgd {_bg .Log .Info ("\u0021\u006e\u0075m\u0045\u006d\u0070\u0074\u0079\u003d\u0025\u0064",_bdbe );
};return nil ,nil ;};}else {_fccf .putComposite (_gcfcb ,_cbcgg ,_ebab ,_ffae .PdfRectangle );for _ ,_gage :=range _ebab {_cdbcb [_gage ]=struct{}{};};};};};_gecg :=0;for _fcbc :=0;_fcbc < _cced ;_fcbc ++{_afaca :=_fccf .get (_fcbc ,0);if _afaca ==nil ||!_afaca ._efgd {_gecg ++;
};};if _gecg ==0{if _fcgd {_bg .Log .Info ("\u0021\u006e\u0075m\u0048\u0065\u0061\u0064\u0065\u0072\u003d\u0030");};return nil ,nil ;};_ceaf :=_fccf .reduceTiling (_gcfcf ,_bace );_ceaf =_ceaf .subdivide ();return _ceaf ,_cdbcb ;};func (_babff paraList )llyRange (_fegb []int ,_cfef ,_cadc float64 )[]int {_dfeb :=len (_babff );
if _cadc < _babff [_fegb [0]].Lly ||_cfef > _babff [_fegb [_dfeb -1]].Lly {return nil ;};_efae :=_gf .Search (_dfeb ,func (_dcb int )bool {return _babff [_fegb [_dcb ]].Lly >=_cfef });_dcdb :=_gf .Search (_dfeb ,func (_bbcdb int )bool {return _babff [_fegb [_bbcdb ]].Lly > _cadc });
return _fegb [_efae :_dcdb ];};func (_afd *shapesState )quadraticTo (_dga ,_aeaa ,_afgf ,_agaa float64 ){if _bgcb {_bg .Log .Info ("\u0071\u0075\u0061d\u0072\u0061\u0074\u0069\u0063\u0054\u006f\u003a");};_afd .addPoint (_afgf ,_agaa );};
// String returns a human readable description of `s`.
func (_egdce intSet )String ()string {var _bbeag []int ;for _cfagbc :=range _egdce {if _egdce .has (_cfagbc ){_bbeag =append (_bbeag ,_cfagbc );};};_gf .Ints (_bbeag );return _gb .Sprintf ("\u0025\u002b\u0076",_bbeag );};func (_gdegf paraList )readBefore (_bgaf []int ,_facgf ,_efbc int )bool {_bcbg ,_fcaec :=_gdegf [_facgf ],_gdegf [_efbc ];
if _fcba (_bcbg ,_fcaec )&&_bcbg .Lly > _fcaec .Lly {return true ;};if !(_bcbg ._abfgf .Urx < _fcaec ._abfgf .Llx ){return false ;};_acge ,_fafe :=_bcbg .Lly ,_fcaec .Lly ;if _acge > _fafe {_fafe ,_acge =_acge ,_fafe ;};_bgac :=_fd .Max (_bcbg ._abfgf .Llx ,_fcaec ._abfgf .Llx );
_fcdf :=_fd .Min (_bcbg ._abfgf .Urx ,_fcaec ._abfgf .Urx );_febac :=_gdegf .llyRange (_bgaf ,_acge ,_fafe );for _ ,_beea :=range _febac {if _beea ==_facgf ||_beea ==_efbc {continue ;};_agada :=_gdegf [_beea ];if _agada ._abfgf .Llx <=_fcdf &&_bgac <=_agada ._abfgf .Urx {return false ;
};};return true ;};type textPara struct{_ba .PdfRectangle ;_abfgf _ba .PdfRectangle ;_abdg []*textLine ;_gddb *textTable ;_fcfa bool ;_efgd bool ;_ffeb *textPara ;_beggg *textPara ;_gaegg *textPara ;_begda *textPara ;};func (_abd *textObject )nextLine (){_abd .moveLP (0,-_abd ._ggec ._aaf )};
type ruling struct{_gcaeg rulingKind ;_ddcg markKind ;_b .Color ;_feccd float64 ;_fdagf float64 ;_egag float64 ;_edaee float64 ;};func (_edbb rulingList )intersections ()map[int ]intSet {var _cfdc ,_bebb []int ;for _gcfb ,_ffgdb :=range _edbb {switch _ffgdb ._gcaeg {case _aba :_cfdc =append (_cfdc ,_gcfb );
case _ced :_bebb =append (_bebb ,_gcfb );};};if len (_cfdc )< _cgeb +1||len (_bebb )< _bgge +1{return nil ;};if len (_cfdc )+len (_bebb )> _dbb {_bg .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 (_edbb ),len (_cfdc ),len (_bebb ));
return nil ;};_dggd :=make (map[int ]intSet ,len (_cfdc )+len (_bebb ));for _ ,_fbgc :=range _cfdc {for _ ,_eddd :=range _bebb {if _edbb [_fbgc ].intersects (_edbb [_eddd ]){if _ ,_cdbb :=_dggd [_fbgc ];!_cdbb {_dggd [_fbgc ]=make (intSet );};if _ ,_fbcc :=_dggd [_eddd ];
!_fbcc {_dggd [_eddd ]=make (intSet );};_dggd [_fbgc ].add (_eddd );_dggd [_eddd ].add (_fbgc );};};};return _dggd ;};func (_aedd *textTable )computeBbox ()_ba .PdfRectangle {var _eaga _ba .PdfRectangle ;_ggbc :=false ;for _fbab :=0;_fbab < _aedd ._deee ;
_fbab ++{for _ebdf :=0;_ebdf < _aedd ._eebbe ;_ebdf ++{_dcgbe :=_aedd .get (_ebdf ,_fbab );if _dcgbe ==nil {continue ;};if !_ggbc {_eaga =_dcgbe .PdfRectangle ;_ggbc =true ;}else {_eaga =_abe (_eaga ,_dcgbe .PdfRectangle );};};};return _eaga ;};type wordBag struct{_ba .PdfRectangle ;
_dgbc float64 ;_cead ,_bdff rulingList ;_cfg float64 ;_ffde map[int ][]*textWord ;};func _abed (_efeb ,_dfbg _de .Point )rulingKind {_gcfe :=_fd .Abs (_efeb .X -_dfbg .X );_ecbf :=_fd .Abs (_efeb .Y -_dfbg .Y );return _gebfd (_gcfe ,_ecbf ,_fgd );};func (_cag *wordBag )depthRange (_adee ,_fcgad int )[]int {var _bdda []int ;
for _bcac :=range _cag ._ffde {if _adee <=_bcac &&_bcac <=_fcgad {_bdda =append (_bdda ,_bcac );};};if len (_bdda )==0{return nil ;};_gf .Ints (_bdda );return _bdda ;};func _fbdgg (_cfge []*wordBag )[]*wordBag {if len (_cfge )<=1{return _cfge ;};if _dcf {_bg .Log .Info ("\u006d\u0065\u0072\u0067\u0065\u0057\u006f\u0072\u0064B\u0061\u0067\u0073\u003a");
};_gf .Slice (_cfge ,func (_bcaad ,_cbfb int )bool {_fced ,_bdcc :=_cfge [_bcaad ],_cfge [_cbfb ];_cadg :=_fced .Width ()*_fced .Height ();_accf :=_bdcc .Width ()*_bdcc .Height ();if _cadg !=_accf {return _cadg > _accf ;};if _fced .Height ()!=_bdcc .Height (){return _fced .Height ()> _bdcc .Height ();
};return _bcaad < _cbfb ;});var _eafa []*wordBag ;_eef :=make (intSet );for _cafe :=0;_cafe < len (_cfge );_cafe ++{if _eef .has (_cafe ){continue ;};_fdfed :=_cfge [_cafe ];for _dfdf :=_cafe +1;_dfdf < len (_cfge );_dfdf ++{if _eef .has (_cafe ){continue ;
};_bfa :=_cfge [_dfdf ];_gfcc :=_fdfed .PdfRectangle ;_gfcc .Llx -=_fdfed ._dgbc ;if _acgg (_gfcc ,_bfa .PdfRectangle ){_fdfed .absorb (_bfa );_eef .add (_dfdf );};};_eafa =append (_eafa ,_fdfed );};if len (_cfge )!=len (_eafa )+len (_eef ){_bg .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 (_cfge ),len (_eafa ),len (_eef ));
};return _eafa ;};
// TextMarkArray is a collection of TextMarks.
type TextMarkArray struct{_bdf []TextMark };
// String returns a description of `v`.
func (_abgf *ruling )String ()string {if _abgf ._gcaeg ==_fdfb {return "\u004e\u004f\u0054\u0020\u0052\u0055\u004c\u0049\u004e\u0047";};_afec ,_cfabb :="\u0078","\u0079";if _abgf ._gcaeg ==_ced {_afec ,_cfabb ="\u0079","\u0078";};_fabb :="";if _abgf ._edaee !=0.0{_fabb =_gb .Sprintf (" \u0077\u0069\u0064\u0074\u0068\u003d\u0025\u002e\u0032\u0066",_abgf ._edaee );
};return _gb .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",_abgf ._gcaeg ,_afec ,_abgf ._feccd ,_cfabb ,_abgf ._fdagf ,_abgf ._egag ,_abgf ._egag -_abgf ._fdagf ,_abgf ._ddcg ,_abgf .Color ,_fabb );
};func (_fcef paraList )inTile (_cecg gridTile )paraList {var _dbbab paraList ;for _ ,_bacee :=range _fcef {if _cecg .contains (_bacee .PdfRectangle ){_dbbab =append (_dbbab ,_bacee );};};if _bega {_gb .Printf ("\u0020 \u0020\u0069\u006e\u0054i\u006c\u0065\u003a\u0020\u0020%\u0073 \u0069n\u0073\u0069\u0064\u0065\u003d\u0025\u0064\n",_cecg ,len (_dbbab ));
for _bdbb ,_cefgc :=range _dbbab {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_bdbb ,_cefgc );};_gb .Println ("");};return _dbbab ;};func (_bdac *wordBag )makeRemovals ()map[int ]map[*textWord ]struct{}{_fgg :=make (map[int ]map[*textWord ]struct{},len (_bdac ._ffde ));
for _abbg :=range _bdac ._ffde {_fgg [_abbg ]=make (map[*textWord ]struct{});};return _fgg ;};func (_cdbfc *textTable )get (_dgedb ,_caeg int )*textPara {return _cdbfc ._aagbe [_fgef (_dgedb ,_caeg )]};func (_gadbd *textPara )toCellTextMarks (_dabb *int )[]TextMark {var _cecf []TextMark ;
for _egbf ,_afdc :=range _gadbd ._abdg {_cbgg :=_afdc .toTextMarks (_dabb );_cae :=_fddc &&_afdc .endsInHyphen ()&&_egbf !=len (_gadbd ._abdg )-1;if _cae {_cbgg =_defbc (_cbgg ,_dabb );};_cecf =append (_cecf ,_cbgg ...);if !(_cae ||_egbf ==len (_gadbd ._abdg )-1){_cecf =_bacfb (_cecf ,_dabb ,_ffdc (_afdc ._bgb ,_gadbd ._abdg [_egbf +1]._bgb ));
};};return _cecf ;};
// 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 (_dd *Extractor )ExtractPageImages (options *ImageExtractOptions )(*PageImages ,error ){_dg :=&imageExtractContext {_cc :options };_ff :=_dg .extractContentStreamImages (_dd ._eg ,_dd ._gc );if _ff !=nil {return nil ,_ff ;};return &PageImages {Images :_dg ._bac },nil ;
};func _fcba (_dfbda ,_eafc *textPara )bool {return _dfbaf (_dfbda ._abfgf ,_eafc ._abfgf )};func _gabcf (_fccd float64 )bool {return _fd .Abs (_fccd )< _dgfe };
// String returns a human readable description of `vecs`.
func (_edfd rulingList )String ()string {if len (_edfd )==0{return "\u007b \u0045\u004d\u0050\u0054\u0059\u0020}";};_eefc ,_ddbf :=_edfd .vertsHorzs ();_badc :=len (_eefc );_adgcb :=len (_ddbf );if _badc ==0||_adgcb ==0{return _gb .Sprintf ("\u007b%\u0064\u0020\u0078\u0020\u0025\u0064}",_badc ,_adgcb );
};_efcdb :=_ba .PdfRectangle {Llx :_eefc [0]._feccd ,Urx :_eefc [_badc -1]._feccd ,Lly :_ddbf [_adgcb -1]._feccd ,Ury :_ddbf [0]._feccd };return _gb .Sprintf ("\u007b\u0025d\u0020\u0078\u0020%\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u007d",_badc ,_adgcb ,_efcdb );
};type intSet map[int ]struct{};var _efff =map[markKind ]string {_aeda :"\u0073\u0074\u0072\u006f\u006b\u0065",_deae :"\u0066\u0069\u006c\u006c",_aabf :"\u0061u\u0067\u006d\u0065\u006e\u0074"};func (_eed *textObject )setCharSpacing (_ddf float64 ){if _eed ==nil {return ;
};_eed ._ggec ._ccba =_ddf ;if _defa {_bg .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",_ddf ,_eed ._ggec .String ());};};func (_cdeg *textObject )renderText (_baeg []byte )error {if _cdeg ._cbab {_bg .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 ;};_dacc :=_cdeg .getCurrentFont ();_egcd :=_dacc .BytesToCharcodes (_baeg );_fac ,_faaf ,_dda :=_dacc .CharcodesToStrings (_egcd );if _dda > 0{_bg .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",_faaf ,_dda );
};_cdeg ._ggec ._dfc +=_faaf ;_cdeg ._ggec ._cbd +=_dda ;_fbc :=_cdeg ._ggec ;_cbcg :=_fbc ._cabe ;_gbff :=_fbc ._ecfe /100.0;_age :=_aef ;if _dacc .Subtype ()=="\u0054\u0079\u0070e\u0033"{_age =1;};_bcd ,_dgba :=_dacc .GetRuneMetrics (' ');if !_dgba {_bcd ,_dgba =_dacc .GetCharMetrics (32);
};if !_dgba {_bcd ,_ =_ba .DefaultFont ().GetRuneMetrics (' ');};_faad :=_bcd .Wx *_age ;_bg .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",_faad ,_fac ,_dacc ,_cbcg );
_agd :=_de .NewMatrix (_cbcg *_gbff ,0,0,_cbcg ,0,_fbc ._eae );if _defa {_bg .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 (_egcd ),_egcd ,_fac );
};_bg .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 (_egcd ),_egcd ,len (_fac ));_gdaa :=_cdeg .getFillColor ();
_dafb :=_cdeg .getStrokeColor ();for _deba ,_egce :=range _fac {_gee :=[]rune (_egce );if len (_gee )==1&&_gee [0]=='\x00'{continue ;};_ddaa :=_egcd [_deba ];_dfb :=_cdeg ._ade .CTM .Mult (_cdeg ._bedc ).Mult (_agd );_deg :=0.0;if len (_gee )==1&&_gee [0]==32{_deg =_fbc ._edbc ;
};_afc ,_egcf :=_dacc .GetCharMetrics (_ddaa );if !_egcf {_bg .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",_ddaa ,_gee ,_gee ,_dacc );
return _gb .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",_dacc .String (),_ddaa );};_aff :=_de .Point {X :_afc .Wx *_age ,Y :_afc .Wy *_age };
_bfb :=_de .Point {X :(_aff .X *_cbcg +_deg )*_gbff };_gfge :=_de .Point {X :(_aff .X *_cbcg +_fbc ._ccba +_deg )*_gbff };if _defa {_bg .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",_cbcg ,_fbc ._ccba ,_fbc ._edbc ,_gbff );
_bg .Log .Info ("\u0064x\u002c\u0064\u0079\u003d%\u002e\u0033\u0066\u0020\u00740\u003d%\u002e3\u0066\u0020\u0074\u003d\u0025\u002e\u0033f",_aff ,_bfb ,_gfge );};_afgb :=_gac (_bfb );_efe :=_gac (_gfge );_cabff :=_cdeg ._ade .CTM .Mult (_cdeg ._bedc ).Mult (_afgb );
if _dfde {_bg .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",_cdeg ._ade .CTM ,_cdeg ._bedc ,_efe ,_cdeb (_cdeg ._ade .CTM .Mult (_cdeg ._bedc ).Mult (_efe )),_afgb ,_cabff ,_cdeb (_cabff ));
};_bebc ,_fbd :=_cdeg .newTextMark (_be .ExpandLigatures (_gee ),_dfb ,_cdeb (_cabff ),_fd .Abs (_faad *_dfb .ScalingFactorX ()),_dacc ,_cdeg ._ggec ._ccba ,_gdaa ,_dafb );if !_fbd {_bg .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 _dacc ==nil {_bg .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u004e\u006f\u0020\u0066\u006f\u006e\u0074\u002e");}else if _dacc .Encoder ()==nil {_bg .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",_dacc );
}else {if _bdb ,_gfagd :=_dacc .Encoder ().CharcodeToRune (_ddaa );_gfagd {_bebc ._gcadb =string (_bdb );};};_bg .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",_deba ,_ddaa ,_bebc ,_dfb );
_cdeg ._gdf =append (_cdeg ._gdf ,&_bebc );_cdeg ._bedc .Concat (_efe );};return nil ;};func (_ddb *shapesState )clearPath (){_ddb ._afab =nil ;_ddb ._ccbf =false ;if _bgcb {_bg .Log .Info ("\u0043\u004c\u0045A\u0052\u003a\u0020\u0073\u0073\u003d\u0025\u0073",_ddb );
};};func _aegeg (_gdeb ,_ddbdc bounded )float64 {return _abcb (_gdeb )-_abcb (_ddbdc )};func _dead (_dfead ,_ffaac float64 )bool {return _dfead /_fd .Max (_fcag ,_ffaac )< _fgd };func (_bafg paraList )computeEBBoxes (){if _fdgg {_bg .Log .Info ("\u0063o\u006dp\u0075\u0074\u0065\u0045\u0042\u0042\u006f\u0078\u0065\u0073\u003a");
};for _ ,_bccg :=range _bafg {_bccg ._abfgf =_bccg .PdfRectangle ;};_begg :=_bafg .yNeighbours (0);for _adcd ,_cfba :=range _bafg {_cgga :=_cfba ._abfgf ;_dcaf ,_bedce :=-1.0e9,+1.0e9;for _ ,_cdcg :=range _begg [_cfba ]{_debe :=_bafg [_cdcg ]._abfgf ;if _debe .Urx < _cgga .Llx {_dcaf =_fd .Max (_dcaf ,_debe .Urx );
}else if _cgga .Urx < _debe .Llx {_bedce =_fd .Min (_bedce ,_debe .Llx );};};for _beeb ,_agcc :=range _bafg {_edae :=_agcc ._abfgf ;if _adcd ==_beeb ||_edae .Ury > _cgga .Lly {continue ;};if _dcaf <=_edae .Llx &&_edae .Llx < _cgga .Llx {_cgga .Llx =_edae .Llx ;
}else if _edae .Urx <=_bedce &&_cgga .Urx < _edae .Urx {_cgga .Urx =_edae .Urx ;};};if _fdgg {_gb .Printf ("\u0025\u0034\u0064\u003a %\u0036\u002e\u0032\u0066\u2192\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0071\u000a",_adcd ,_cfba ._abfgf ,_cgga ,_eedbc (_cfba .text (),50));
};_cfba ._abfgf =_cgga ;};if _cabfc {for _ ,_edcc :=range _bafg {_edcc .PdfRectangle =_edcc ._abfgf ;};};};type rectRuling struct{_eabda rulingKind ;_ebge markKind ;_b .Color ;_ba .PdfRectangle ;};func _bfga (_fadf ,_bfggb int )int {if _fadf < _bfggb {return _fadf ;
};return _bfggb ;};func (_efd *shapesState )newSubPath (){_efd .clearPath ();if _bgcb {_bg .Log .Info ("\u006e\u0065\u0077\u0053\u0075\u0062\u0050\u0061\u0074h\u003a\u0020\u0025\u0073",_efd );};};func (_bacge rulingList )splitSec ()[]rulingList {_gf .Slice (_bacge ,func (_abbe ,_fffda int )bool {_eefag ,_eaef :=_bacge [_abbe ],_bacge [_fffda ];
if _eefag ._fdagf !=_eaef ._fdagf {return _eefag ._fdagf < _eaef ._fdagf ;};return _eefag ._egag < _eaef ._egag ;});_cgd :=make (map[*ruling ]struct{},len (_bacge ));_cfga :=func (_face *ruling )rulingList {_cfbaf :=rulingList {_face };_cgd [_face ]=struct{}{};
for _ ,_aaae :=range _bacge {if _ ,_gecd :=_cgd [_aaae ];_gecd {continue ;};for _ ,_cgff :=range _cfbaf {if _aaae .alignsSec (_cgff ){_cfbaf =append (_cfbaf ,_aaae );_cgd [_aaae ]=struct{}{};break ;};};};return _cfbaf ;};_faee :=[]rulingList {_cfga (_bacge [0])};
for _ ,_dadbg :=range _bacge [1:]{if _ ,_eegg :=_cgd [_dadbg ];_eegg {continue ;};_faee =append (_faee ,_cfga (_dadbg ));};return _faee ;};var _ccaa =map[rulingKind ]string {_fdfb :"\u006e\u006f\u006e\u0065",_ced :"\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_aba :"\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c"};
// 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 (_bggb *TextMarkArray )RangeOffset (start ,end int )(*TextMarkArray ,error ){if _bggb ==nil {return nil ,_c .New ("\u006da\u003d\u003d\u006e\u0069\u006c");};if end < start {return nil ,_gb .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 );
};_ffac :=len (_bggb ._bdf );if _ffac ==0{return _bggb ,nil ;};if start < _bggb ._bdf [0].Offset {start =_bggb ._bdf [0].Offset ;};if end > _bggb ._bdf [_ffac -1].Offset +1{end =_bggb ._bdf [_ffac -1].Offset +1;};_bdfb :=_gf .Search (_ffac ,func (_gaff int )bool {return _bggb ._bdf [_gaff ].Offset +len (_bggb ._bdf [_gaff ].Text )-1>=start });
if !(0<=_bdfb &&_bdfb < _ffac ){_bdeg :=_gb .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 ,_bdfb ,_ffac ,_bggb ._bdf [0],_bggb ._bdf [_ffac -1]);
return nil ,_bdeg ;};_eec :=_gf .Search (_ffac ,func (_aaaf int )bool {return _bggb ._bdf [_aaaf ].Offset > end -1});if !(0<=_eec &&_eec < _ffac ){_fbb :=_gb .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 ,_eec ,_ffac ,_bggb ._bdf [0],_bggb ._bdf [_ffac -1]);
return nil ,_fbb ;};if _eec <=_bdfb {return nil ,_gb .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 ,_bdfb ,_eec );
};return &TextMarkArray {_bdf :_bggb ._bdf [_bdfb :_eec ]},nil ;};func _aded (_adefb []*textWord ,_fbcg float64 ,_eddb ,_fdea rulingList )*wordBag {_dfcd :=_facg (_adefb [0],_fbcg ,_eddb ,_fdea );for _ ,_bcaf :=range _adefb [1:]{_gbde :=_ggde (_bcaf ._cgcc );
_dfcd ._ffde [_gbde ]=append (_dfcd ._ffde [_gbde ],_bcaf );_dfcd .PdfRectangle =_abe (_dfcd .PdfRectangle ,_bcaf .PdfRectangle );};_dfcd .sort ();return _dfcd ;};
// String returns a string describing `pt`.
func (_fcc PageText )String ()string {_deab :=_gb .Sprintf ("P\u0061\u0067\u0065\u0054ex\u0074:\u0020\u0025\u0064\u0020\u0065l\u0065\u006d\u0065\u006e\u0074\u0073",len (_fcc ._bef ));_bedg :=[]string {"\u002d"+_deab };for _ ,_ada :=range _fcc ._bef {_bedg =append (_bedg ,_ada .String ());
};_bedg =append (_bedg ,"\u002b"+_deab );return _fg .Join (_bedg ,"\u000a");};
// String returns a string descibing `i`.
func (_abfd gridTile )String ()string {_fgce :=func (_acba bool ,_gefe string )string {if _acba {return _gefe ;};return "\u005f";};return _gb .Sprintf ("\u00256\u002e2\u0066\u0020\u0025\u0031\u0073%\u0031\u0073%\u0031\u0073\u0025\u0031\u0073",_abfd .PdfRectangle ,_fgce (_abfd ._effc ,"\u004c"),_fgce (_abfd ._cbgf ,"\u0052"),_fgce (_abfd ._ebgg ,"\u0042"),_fgce (_abfd ._ggbd ,"\u0054"));
};func (_cfbcc *textPara )writeText (_badb _d .Writer ){if _cfbcc ._gddb ==nil {_cfbcc .writeCellText (_badb );return ;};for _bbed :=0;_bbed < _cfbcc ._gddb ._deee ;_bbed ++{for _dfea :=0;_dfea < _cfbcc ._gddb ._eebbe ;_dfea ++{_dbba :=_cfbcc ._gddb .get (_dfea ,_bbed );
if _dbba ==nil {_badb .Write ([]byte ("\u0009"));}else {_dbba .writeCellText (_badb );};_badb .Write ([]byte ("\u0020"));};if _bbed < _cfbcc ._gddb ._deee -1{_badb .Write ([]byte ("\u000a"));};};};func _gbgg (_edacc []pathSection )rulingList {_gacd (_edacc );
if _egg {_bg .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 (_edacc ));};var _acag rulingList ;for _ ,_befa :=range _edacc {for _ ,_deeg :=range _befa ._aead {if len (_deeg ._cgf )< 2{continue ;
};_cdcbb :=_deeg ._cgf [0];for _ ,_cfcag :=range _deeg ._cgf [1:]{if _bddd ,_daag :=_edge (_cdcbb ,_cfcag ,_befa .Color );_daag {_acag =append (_acag ,_bddd );};_cdcbb =_cfcag ;};};};if _egg {_bg .Log .Info ("m\u0061\u006b\u0065\u0053tr\u006fk\u0065\u0052\u0075\u006c\u0069n\u0067\u0073\u003a\u0020\u0025\u0073",_acag );
};return _acag ;};func (_ddcce intSet )has (_fcac int )bool {_ ,_baffa :=_ddcce [_fcac ];return _baffa };func _ccgdd (_faabc map[int ][]float64 )string {_bcbd :=_fged (_faabc );_dafe :=make ([]string ,len (_faabc ));for _ebcaa ,_aeffg :=range _bcbd {_dafe [_ebcaa ]=_gb .Sprintf ("\u0025\u0064\u003a\u0020\u0025\u002e\u0032\u0066",_aeffg ,_faabc [_aeffg ]);
};return _gb .Sprintf ("\u007b\u0025\u0073\u007d",_fg .Join (_dafe ,"\u002c\u0020"));};func _eba (_eaac _ba .PdfRectangle ,_fca bounded )float64 {return _eaac .Ury -_fca .bbox ().Lly };type textResult struct{_bcb PageText ;_gfga int ;_fbg int ;};func (_bcda *shapesState )stroke (_gece *[]pathSection ){_adec :=pathSection {_aead :_bcda ._afab ,Color :_bcda ._bbf .getStrokeColor ()};
*_gece =append (*_gece ,_adec );if _egg {_gb .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 (*_gece ),_bcda ,_bcda ._bbf .getStrokeColor (),_adec .bbox ());
if _ebed {for _egdc ,_gbbg :=range _bcda ._afab {_gb .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_egdc ,_gbbg );if _egdc ==10{break ;};};};};};func (_gaea *textLine )pullWord (_abeg *wordBag ,_afcf *textWord ,_fecc int ){_gaea .appendWord (_afcf );
_abeg .removeWord (_afcf ,_fecc );};
// 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 (_fcf *Extractor )ExtractText ()(string ,error ){_afb ,_ ,_ ,_beg :=_fcf .ExtractTextWithStats ();return _afb ,_beg ;};func _cfbb (_adfea ,_gccb ,_debfb ,_cfabbg *textPara )*textTable {_dcgda :=&textTable {_eebbe :2,_deee :2,_aagbe :make (map[uint64 ]*textPara ,4)};
_dcgda .put (0,0,_adfea );_dcgda .put (1,0,_gccb );_dcgda .put (0,1,_debfb );_dcgda .put (1,1,_cfabbg );return _dcgda ;};
// String returns a description of `k`.
func (_bgfa markKind )String ()string {_gcgd ,_cegd :=_efff [_bgfa ];if !_cegd {return _gb .Sprintf ("\u004e\u006f\u0074\u0020\u0061\u0020\u006d\u0061\u0072k\u003a\u0020\u0025\u0064",_bgfa );};return _gcgd ;};func (_dcae *shapesState )lineTo (_bege ,_affc float64 ){if _bgcb {_bg .Log .Info ("\u006c\u0069\u006eeT\u006f\u0028\u0025\u002e\u0032\u0066\u002c\u0025\u002e\u0032\u0066\u0020\u0070\u003d\u0025\u002e\u0032\u0066",_bege ,_affc ,_dcae .devicePoint (_bege ,_affc ));
};_dcae .addPoint (_bege ,_affc );};func (_efdbg *wordBag )removeDuplicates (){if _aecf {_bg .Log .Info ("r\u0065m\u006f\u0076\u0065\u0044\u0075\u0070\u006c\u0069c\u0061\u0074\u0065\u0073: \u0025\u0071",_efdbg .text ());};for _ ,_edbf :=range _efdbg .depthIndexes (){if len (_efdbg ._ffde [_edbf ])==0{continue ;
};_bcbf :=_efdbg ._ffde [_edbf ][0];_cfaa :=_eddff *_bcbf ._abac ;_daab :=_bcbf ._cgcc ;for _ ,_dddg :=range _efdbg .depthBand (_daab ,_daab +_cfaa ){_bgeb :=map[*textWord ]struct{}{};_cbga :=_efdbg ._ffde [_dddg ];for _ ,_dege :=range _cbga {if _ ,_gbgbdc :=_bgeb [_dege ];
_gbgbdc {continue ;};for _ ,_ebcb :=range _cbga {if _ ,_cege :=_bgeb [_ebcb ];_cege {continue ;};if _ebcb !=_dege &&_ebcb ._ecdfc ==_dege ._ecdfc &&_fd .Abs (_ebcb .Llx -_dege .Llx )< _cfaa &&_fd .Abs (_ebcb .Urx -_dege .Urx )< _cfaa &&_fd .Abs (_ebcb .Lly -_dege .Lly )< _cfaa &&_fd .Abs (_ebcb .Ury -_dege .Ury )< _cfaa {_bgeb [_ebcb ]=struct{}{};
};};};if len (_bgeb )> 0{_aeebb :=0;for _ ,_bcad :=range _cbga {if _ ,_cefff :=_bgeb [_bcad ];!_cefff {_cbga [_aeebb ]=_bcad ;_aeebb ++;};};_efdbg ._ffde [_dddg ]=_cbga [:len (_cbga )-len (_bgeb )];if len (_efdbg ._ffde [_dddg ])==0{delete (_efdbg ._ffde ,_dddg );
};};};};};type stateStack []*textState ;const (_effa markKind =iota ;_aeda ;_deae ;_aabf ;);func _efdbe (_bbbf string ,_efac []rulingList ){_bg .Log .Info ("\u0024\u0024 \u0025\u0064\u0020g\u0072\u0069\u0064\u0073\u0020\u002d\u0020\u0025\u0073",len (_efac ),_bbbf );
for _bdddd ,_fcab :=range _efac {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_bdddd ,_fcab .String ());};};
// 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 (_edeb rulingList )augmentGrid ()(rulingList ,rulingList ){_cgaeg ,_fdab :=_edeb .vertsHorzs ();if len (_cgaeg )==0||len (_fdab )==0{return _cgaeg ,_fdab ;};_ebdg ,_beeaf :=_cgaeg ,_fdab ;_egff :=_cgaeg .bbox ();
_bfbd :=_fdab .bbox ();if _egg {_bg .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0056\u003d\u0025\u0036\u002e\u0032\u0066",_egff );_bg .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0048\u003d\u0025\u0036\u002e\u0032\u0066",_bfbd );
};var _cegb ,_cggcb ,_ggcg ,_ggff *ruling ;if _bfbd .Llx < _egff .Llx -_afac {_cegb =&ruling {_ddcg :_aabf ,_gcaeg :_aba ,_feccd :_bfbd .Llx ,_fdagf :_egff .Lly ,_egag :_egff .Ury };_cgaeg =append (rulingList {_cegb },_cgaeg ...);};if _bfbd .Urx > _egff .Urx +_afac {_cggcb =&ruling {_ddcg :_aabf ,_gcaeg :_aba ,_feccd :_bfbd .Urx ,_fdagf :_egff .Lly ,_egag :_egff .Ury };
_cgaeg =append (_cgaeg ,_cggcb );};if _egff .Lly < _bfbd .Lly -_afac {_ggcg =&ruling {_ddcg :_aabf ,_gcaeg :_ced ,_feccd :_egff .Lly ,_fdagf :_bfbd .Llx ,_egag :_bfbd .Urx };_fdab =append (rulingList {_ggcg },_fdab ...);};if _egff .Ury > _bfbd .Ury +_afac {_ggff =&ruling {_ddcg :_aabf ,_gcaeg :_ced ,_feccd :_egff .Ury ,_fdagf :_bfbd .Llx ,_egag :_bfbd .Urx };
_fdab =append (_fdab ,_ggff );};if len (_cgaeg )+len (_fdab )==len (_edeb ){return _ebdg ,_beeaf ;};_ccddf :=append (_cgaeg ,_fdab ...);_edeb .log ("u\u006e\u0061\u0075\u0067\u006d\u0065\u006e\u0074\u0065\u0064");_ccddf .log ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0065d");
return _cgaeg ,_fdab ;};func _dec (_aaee _de .Point )*subpath {return &subpath {_cgf :[]_de .Point {_aaee }}};func (_gefd rulingList )tidied (_gdbc string )rulingList {_fdfea :=_gefd .removeDuplicates ();_fdfea .log ("\u0075n\u0069\u0071\u0075\u0065\u0073");
_gbbf :=_fdfea .snapToGroups ();if _gbbf ==nil {return nil ;};_gbbf .sort ();if _egg {_bg .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",_gdbc ,len (_gefd ),len (_fdfea ),len (_gbbf ));
};_gbbf .log ("\u0063o\u0061\u006c\u0065\u0073\u0063\u0065d");return _gbbf ;};func (_dacd *textPara )isAtom ()*textTable {_fadde :=_dacd ;_ffcc :=_dacd ._beggg ;_edeca :=_dacd ._begda ;if _ffcc .taken ()||_edeca .taken (){return nil ;};_gggc :=_ffcc ._begda ;
if _gggc .taken ()||_gggc !=_edeca ._beggg {return nil ;};return _cfbb (_fadde ,_ffcc ,_edeca ,_gggc );};func (_facea *textTable )logComposite (_eeea string ){if !_bega {return ;};_bg .Log .Info ("\u007e~\u007eP\u0061\u0072\u0061\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_facea ._eebbe ,_facea ._deee ,_eeea );
_gb .Printf ("\u0025\u0035\u0073 \u007c","");for _fbbgb :=0;_fbbgb < _facea ._eebbe ;_fbbgb ++{_gb .Printf ("\u0025\u0033\u0064 \u007c",_fbbgb );};_gb .Println ("");_gb .Printf ("\u0025\u0035\u0073 \u002b","");for _bfdc :=0;_bfdc < _facea ._eebbe ;_bfdc ++{_gb .Printf ("\u0025\u0033\u0073 \u002b","\u002d\u002d\u002d");
};_gb .Println ("");for _efcgf :=0;_efcgf < _facea ._deee ;_efcgf ++{_gb .Printf ("\u0025\u0035\u0064 \u007c",_efcgf );for _eadfa :=0;_eadfa < _facea ._eebbe ;_eadfa ++{_gdab ,_ :=_facea ._gag [_fgef (_eadfa ,_efcgf )].parasBBox ();_gb .Printf ("\u0025\u0033\u0064 \u007c",len (_gdab ));
};_gb .Println ("");};_bg .Log .Info ("\u007e~\u007eT\u0065\u0078\u0074\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_facea ._eebbe ,_facea ._deee ,_eeea );_gb .Printf ("\u0025\u0035\u0073 \u007c","");for _eabe :=0;_eabe < _facea ._eebbe ;_eabe ++{_gb .Printf ("\u0025\u0031\u0032\u0064\u0020\u007c",_eabe );
};_gb .Println ("");_gb .Printf ("\u0025\u0035\u0073 \u002b","");for _cbgfc :=0;_cbgfc < _facea ._eebbe ;_cbgfc ++{_gb .Print ("\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d-\u002d\u002d\u002d\u002b");};_gb .Println ("");for _ecaff :=0;_ecaff < _facea ._deee ;
_ecaff ++{_gb .Printf ("\u0025\u0035\u0064 \u007c",_ecaff );for _agbg :=0;_agbg < _facea ._eebbe ;_agbg ++{_cgcg ,_ :=_facea ._gag [_fgef (_agbg ,_ecaff )].parasBBox ();_bbcc :="";_afdfb :=_cgcg .merge ();if _afdfb !=nil {_bbcc =_afdfb .text ();};_bbcc =_gb .Sprintf ("\u0025\u0071",_eedbc (_bbcc ,12));
_bbcc =_bbcc [1:len (_bbcc )-1];_gb .Printf ("\u0025\u0031\u0032\u0073\u0020\u007c",_bbcc );};_gb .Println ("");};};func _gfgd (_acgd []int )[]int {_dfbf :=make ([]int ,len (_acgd ));for _gbebe ,_ffgd :=range _acgd {_dfbf [len (_acgd )-1-_gbebe ]=_ffgd ;
};return _dfbf ;};func (_facbc *textLine )endsInHyphen ()bool {_cdcc :=_facbc ._eacc [len (_facbc ._eacc )-1];_dagd :=_cdcc ._ecdfc ;_ggfg ,_eaee :=_cd .DecodeLastRuneInString (_dagd );if _eaee <=0||!_e .Is (_e .Hyphen ,_ggfg ){return false ;};if _cdcc ._eccda &&_bade (_dagd ){return true ;
};return _bade (_facbc .text ());};func _bgfadf (_bagc _ba .PdfColorspace ,_gdde _ba .PdfColor )_b .Color {if _bagc ==nil ||_gdde ==nil {return _b .Black ;};_faggb ,_decbbd :=_bagc .ColorToRGB (_gdde );if _decbbd !=nil {_bg .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",_gdde ,_bagc ,_decbbd );
return _b .Black ;};_ebea ,_eaacd :=_faggb .(*_ba .PdfColorDeviceRGB );if !_eaacd {_bg .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",_faggb );
return _b .Black ;};return _b .NRGBA {R :uint8 (_ebea .R ()*255),G :uint8 (_ebea .G ()*255),B :uint8 (_ebea .B ()*255),A :uint8 (255)};};func (_dgac rulingList )findPrimSec (_gabe ,_bcdb float64 )*ruling {for _ ,_dbga :=range _dgac {if _edbbc (_dbga ._feccd -_gabe )&&_dbga ._fdagf -_afac <=_bcdb &&_bcdb <=_dbga ._egag +_afac {return _dbga ;
};};return nil ;};func (_fgbc *textWord )toTextMarks (_cdbg *int )[]TextMark {var _bdgfd []TextMark ;for _ ,_ebbb :=range _fgbc ._ddfa {_bdgfd =_egeb (_bdgfd ,_cdbg ,_ebbb .ToTextMark ());};return _bdgfd ;};func _gdage (_eggb map[float64 ]map[float64 ]gridTile )[]float64 {_bbdcb :=make ([]float64 ,0,len (_eggb ));
_egcbb :=make (map[float64 ]struct{},len (_eggb ));for _ ,_dbbd :=range _eggb {for _fddf :=range _dbbd {if _ ,_bdcg :=_egcbb [_fddf ];_bdcg {continue ;};_bbdcb =append (_bbdcb ,_fddf );_egcbb [_fddf ]=struct{}{};};};_gf .Float64s (_bbdcb );return _bbdcb ;
};func _bbce (_ebe ,_bbcb bounded )float64 {_fge :=_dbea (_ebe ,_bbcb );if !_edbbc (_fge ){return _fge ;};return _aegeg (_ebe ,_bbcb );};func _afde (_cdbf ,_ecfc float64 )bool {return _fd .Abs (_cdbf -_ecfc )<=_afac };func (_gffg *wordBag )getDepthIdx (_bdc float64 )int {_ebf :=_gffg .depthIndexes ();
_aebf :=_ggde (_bdc );if _aebf < _ebf [0]{return _ebf [0];};if _aebf > _ebf [len (_ebf )-1]{return _ebf [len (_ebf )-1];};return _aebf ;};func (_cdcbf paraList )sortReadingOrder (){_bg .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 (_cdcbf ));
if len (_cdcbf )<=1{return ;};_cdcbf .computeEBBoxes ();_gf .Slice (_cdcbf ,func (_aaba ,_gfcg int )bool {return _afge (_cdcbf [_aaba ],_cdcbf [_gfcg ])<=0});_adab :=_cdcbf .topoOrder ();_cdcbf .reorder (_adab );};func _bacfb (_aaac []TextMark ,_daac *int ,_ccfg string )[]TextMark {_egcg :=_ebg ;
_egcg .Text =_ccfg ;return _egeb (_aaac ,_daac ,_egcg );};func (_cfd paraList )llyOrdering ()[]int {_aedb :=make ([]int ,len (_cfd ));for _aabg :=range _cfd {_aedb [_aabg ]=_aabg ;};_gf .SliceStable (_aedb ,func (_cbg ,_aged int )bool {_afdba ,_ecgd :=_aedb [_cbg ],_aedb [_aged ];
return _cfd [_afdba ].Lly < _cfd [_ecgd ].Lly ;});return _aedb ;};func (_fggbd *textTable )emptyCompositeColumn (_dged int )bool {for _gffeb :=0;_gffeb < _fggbd ._deee ;_gffeb ++{if _beeg ,_adeec :=_fggbd ._gag [_fgef (_dged ,_gffeb )];_adeec {if len (_beeg .paraList )> 0{return false ;
};};};return true ;};func (_afged *textTable )depth ()float64 {_bbgce :=1e10;for _bfea :=0;_bfea < _afged ._eebbe ;_bfea ++{_ecfa :=_afged .get (_bfea ,0);if _ecfa ==nil ||_ecfa ._efgd {continue ;};_bbgce =_fd .Min (_bbgce ,_ecfa .depth ());};return _bbgce ;
};func (_bcbb *textMark )bbox ()_ba .PdfRectangle {return _bcbb .PdfRectangle };func _dcab (_dgae []*textWord ,_abebb *textWord )[]*textWord {for _gfcb ,_gcdd :=range _dgae {if _gcdd ==_abebb {return _bbac (_dgae ,_gfcb );};};_bg .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",_abebb );
return nil ;};func (_bbbc *textLine )text ()string {var _cafc []string ;for _ ,_ecef :=range _bbbc ._eacc {if _ecef ._eccda {_cafc =append (_cafc ,"\u0020");};_cafc =append (_cafc ,_ecef ._ecdfc );};return _fg .Join (_cafc ,"");};func (_dadba rulingList )snapToGroups ()rulingList {_adge ,_bebe :=_dadba .vertsHorzs ();
if len (_adge )> 0{_adge =_adge .snapToGroupsDirection ();};if len (_bebe )> 0{_bebe =_bebe .snapToGroupsDirection ();};_fgfg :=append (_adge ,_bebe ...);_fgfg .log ("\u0073\u006e\u0061p\u0054\u006f\u0047\u0072\u006f\u0075\u0070\u0073");return _fgfg ;};
func (_agee gridTiling )log (_edfbg string ){if !_fcgd {return ;};_bg .Log .Info ("\u0074i\u006ci\u006e\u0067\u003a\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0071",len (_agee ._abgd ),len (_agee ._gbdg ),_edfbg );_gb .Printf ("\u0020\u0020\u0020l\u006c\u0078\u003d\u0025\u002e\u0032\u0066\u000a",_agee ._abgd );
_gb .Printf ("\u0020\u0020\u0020l\u006c\u0079\u003d\u0025\u002e\u0032\u0066\u000a",_agee ._gbdg );for _dgfdg ,_debb :=range _agee ._gbdg {_acdaa ,_fabf :=_agee ._cfbe [_debb ];if !_fabf {continue ;};_gb .Printf ("%\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u000a",_dgfdg ,_debb );
for _dbaad ,_fcccd :=range _agee ._abgd {_fcffb ,_ffda :=_acdaa [_fcccd ];if !_ffda {continue ;};_gb .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_dbaad ,_fcffb .String ());};};};
// ToTextMark returns the public view of `tm`.
func (_bfgd *textMark )ToTextMark ()TextMark {return TextMark {Text :_bfgd ._acbe ,Original :_bfgd ._gcadb ,BBox :_bfgd ._add ,Font :_bfgd ._eage ,FontSize :_bfgd ._ebeg ,FillColor :_bfgd ._gaa ,StrokeColor :_bfgd ._bdgc ,Orientation :_bfgd ._cffe };};
func (_bgfd *textWord )absorb (_acdab *textWord ){_bgfd .PdfRectangle =_abe (_bgfd .PdfRectangle ,_acdab .PdfRectangle );_bgfd ._ddfa =append (_bgfd ._ddfa ,_acdab ._ddfa ...);};const (_dbdd =1.0e-6;_dgda =1.0e-4;_afdb =10;_bfd =6;_cggc =0.5;_eeed =0.12;
_fcdb =0.19;_accfa =0.04;_ebcdf =0.04;_dgaa =1.0;_ffbef =0.04;_aagb =0.4;_fcdd =0.7;_daee =1.0;_geg =0.1;_dgfb =1.4;_febb =0.46;_ddea =0.02;_eddff =0.2;_fdeb =0.5;_egda =4;_caca =4.0;_cbabb =6;_fceaf =0.3;_dgdaa =0.01;_defd =0.02;_cgeb =2;_bgge =2;_dbb =500;
_eaggg =4.0;_febbc =4.0;_fgd =0.05;_fcag =0.1;_afac =2.0;_dgfe =2.0;_egad =1.5;_bace =3.0;_dddac =0.25;);func (_eddf *textObject )getFillColor ()_b .Color {return _bgfadf (_eddf ._ade .ColorspaceNonStroking ,_eddf ._ade .ColorNonStroking );};type imageExtractContext struct{_bac []ImageMark ;
_ffb int ;_fcb int ;_dgf int ;_gbf map[*_bgf .PdfObjectStream ]*cachedImage ;_cc *ImageExtractOptions ;};func (_dde *shapesState )fill (_fcbga *[]pathSection ){_ged :=pathSection {_aead :_dde ._afab ,Color :_dde ._bbf .getFillColor ()};*_fcbga =append (*_fcbga ,_ged );
if _egg {_ccdd :=_ged .bbox ();_gb .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 (*_fcbga ),len (_ged ._aead ),_dde ,_ged .Color ,_ccdd ,_ccdd .Width (),_ccdd .Height ());
if _ebed {for _fde ,_fcge :=range _ged ._aead {_gb .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_fde ,_fcge );if _fde ==10{break ;};};};};};
// ImageExtractOptions contains options for controlling image extraction from
// PDF pages.
type ImageExtractOptions struct{IncludeInlineStencilMasks bool ;};func (_bf *imageExtractContext )extractFormImages (_ede *_bgf .PdfObjectName ,_dgc _fc .GraphicsState ,_dee *_ba .PdfPageResources )error {_bbe ,_cdfg :=_dee .GetXObjectFormByName (*_ede );
if _cdfg !=nil {return _cdfg ;};if _bbe ==nil {return nil ;};_ae ,_cdfg :=_bbe .GetContentStream ();if _cdfg !=nil {return _cdfg ;};_acd :=_bbe .Resources ;if _acd ==nil {_acd =_dee ;};_cdfg =_bf .extractContentStreamImages (string (_ae ),_acd );if _cdfg !=nil {return _cdfg ;
};_bf ._dgf ++;return nil ;};func (_cfega *textObject )newTextMark (_gccg string ,_gfbe _de .Matrix ,_cbeg _de .Point ,_bgbg float64 ,_egfe *_ba .PdfFont ,_dacbg float64 ,_bddb ,_afeg _b .Color )(textMark ,bool ){_eedg :=_gfbe .Angle ();_dgge :=_bfff (_eedg ,_afdb );
var _gffe float64 ;if _dgge %180!=90{_gffe =_gfbe .ScalingFactorY ();}else {_gffe =_gfbe .ScalingFactorX ();};_dcdg :=_cdeb (_gfbe );_befb :=_ba .PdfRectangle {Llx :_dcdg .X ,Lly :_dcdg .Y ,Urx :_cbeg .X ,Ury :_cbeg .Y };switch _dgge %360{case 90:_befb .Urx -=_gffe ;
case 180:_befb .Ury -=_gffe ;case 270:_befb .Urx +=_gffe ;case 0:_befb .Ury +=_gffe ;default:_dgge =0;_befb .Ury +=_gffe ;};if _befb .Llx > _befb .Urx {_befb .Llx ,_befb .Urx =_befb .Urx ,_befb .Llx ;};if _befb .Lly > _befb .Ury {_befb .Lly ,_befb .Ury =_befb .Ury ,_befb .Lly ;
};_fbbd :=true ;if _cfega ._aed ._af .Width ()> 0{_gfbb ,_eccd :=_cdcb (_befb ,_cfega ._aed ._af );if !_eccd {_fbbd =false ;_bg .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",_befb ,_cfega ._aed ._af ,_gccg );
};_befb =_gfbb ;};_gafe :=_befb ;_cdg :=_cfega ._aed ._af ;switch _dgge %360{case 90:_cdg .Urx ,_cdg .Ury =_cdg .Ury ,_cdg .Urx ;_gafe =_ba .PdfRectangle {Llx :_cdg .Urx -_befb .Ury ,Urx :_cdg .Urx -_befb .Lly ,Lly :_befb .Llx ,Ury :_befb .Urx };case 180:_gafe =_ba .PdfRectangle {Llx :_cdg .Urx -_befb .Llx ,Urx :_cdg .Urx -_befb .Urx ,Lly :_cdg .Ury -_befb .Lly ,Ury :_cdg .Ury -_befb .Ury };
case 270:_cdg .Urx ,_cdg .Ury =_cdg .Ury ,_cdg .Urx ;_gafe =_ba .PdfRectangle {Llx :_befb .Ury ,Urx :_befb .Lly ,Lly :_cdg .Ury -_befb .Llx ,Ury :_cdg .Ury -_befb .Urx };};if _gafe .Llx > _gafe .Urx {_gafe .Llx ,_gafe .Urx =_gafe .Urx ,_gafe .Llx ;};if _gafe .Lly > _gafe .Ury {_gafe .Lly ,_gafe .Ury =_gafe .Ury ,_gafe .Lly ;
};_edcg :=textMark {_acbe :_gccg ,PdfRectangle :_gafe ,_add :_befb ,_eage :_egfe ,_ebeg :_gffe ,_ggdf :_dacbg ,_gcdf :_gfbe ,_gdef :_cbeg ,_cffe :_dgge ,_gaa :_bddb ,_bdgc :_afeg };if _dafg {_bg .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",_dcdg ,_cbeg ,_edcg .String ());
};return _edcg ,_fbbd ;};func _gac (_dfe _de .Point )_de .Matrix {return _de .TranslationMatrix (_dfe .X ,_dfe .Y )};func (_gdce *wordBag )sort (){for _ ,_bggf :=range _gdce ._ffde {_gf .Slice (_bggf ,func (_fccecc ,_gadc int )bool {return _dbea (_bggf [_fccecc ],_bggf [_gadc ])< 0});
};};func _bdfcf (_ffg ,_ddbe _ba .PdfRectangle )bool {return _ffg .Lly <=_ddbe .Ury &&_ddbe .Lly <=_ffg .Ury };func _bade (_dabc string )bool {if _cd .RuneCountInString (_dabc )< _egda {return false ;};_ddac ,_dcad :=_cd .DecodeLastRuneInString (_dabc );
if _dcad <=0||!_e .Is (_e .Hyphen ,_ddac ){return false ;};_ddac ,_dcad =_cd .DecodeLastRuneInString (_dabc [:len (_dabc )-_dcad ]);return _dcad > 0&&!_e .IsSpace (_ddac );};
// String returns a description of `k`.
func (_bbadg rulingKind )String ()string {_gbec ,_adca :=_ccaa [_bbadg ];if !_adca {return _gb .Sprintf ("\u004e\u006ft\u0020\u0061\u0020r\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0064",_bbadg );};return _gbec ;};func (_ggeec paraList )addNeighbours (){_bcfe :=func (_geegf []int ,_deac *textPara )([]*textPara ,[]*textPara ){_afdaa :=make ([]*textPara ,0,len (_geegf )-1);
_gbfgb :=make ([]*textPara ,0,len (_geegf )-1);for _ ,_bgadg :=range _geegf {_cgaeb :=_ggeec [_bgadg ];if _cgaeb .Urx <=_deac .Llx {_afdaa =append (_afdaa ,_cgaeb );}else if _cgaeb .Llx >=_deac .Urx {_gbfgb =append (_gbfgb ,_cgaeb );};};return _afdaa ,_gbfgb ;
};_ccdef :=func (_cdef []int ,_cdff *textPara )([]*textPara ,[]*textPara ){_fcgce :=make ([]*textPara ,0,len (_cdef )-1);_fage :=make ([]*textPara ,0,len (_cdef )-1);for _ ,_dbcb :=range _cdef {_dacf :=_ggeec [_dbcb ];if _dacf .Ury <=_cdff .Lly {_fage =append (_fage ,_dacf );
}else if _dacf .Lly >=_cdff .Ury {_fcgce =append (_fcgce ,_dacf );};};return _fcgce ,_fage ;};_bfcfg :=_ggeec .yNeighbours (_defd );for _ ,_ccecc :=range _ggeec {_becee :=_bfcfg [_ccecc ];if len (_becee )==0{continue ;};_cebg ,_gfffd :=_bcfe (_becee ,_ccecc );
if len (_cebg )==0&&len (_gfffd )==0{continue ;};if len (_cebg )> 0{_facf :=_cebg [0];for _ ,_gdbb :=range _cebg [1:]{if _gdbb .Urx >=_facf .Urx {_facf =_gdbb ;};};for _ ,_eafcc :=range _cebg {if _eafcc !=_facf &&_eafcc .Urx > _facf .Llx {_facf =nil ;break ;
};};if _facf !=nil &&_bdfcf (_ccecc .PdfRectangle ,_facf .PdfRectangle ){_ccecc ._ffeb =_facf ;};};if len (_gfffd )> 0{_bdcca :=_gfffd [0];for _ ,_cdbba :=range _gfffd [1:]{if _cdbba .Llx <=_bdcca .Llx {_bdcca =_cdbba ;};};for _ ,_gbfe :=range _gfffd {if _gbfe !=_bdcca &&_gbfe .Llx < _bdcca .Urx {_bdcca =nil ;
break ;};};if _bdcca !=nil &&_bdfcf (_ccecc .PdfRectangle ,_bdcca .PdfRectangle ){_ccecc ._beggg =_bdcca ;};};};_bfcfg =_ggeec .xNeighbours (_dgdaa );for _ ,_fegd :=range _ggeec {_gddg :=_bfcfg [_fegd ];if len (_gddg )==0{continue ;};_agcfc ,_fedfa :=_ccdef (_gddg ,_fegd );
if len (_agcfc )==0&&len (_fedfa )==0{continue ;};if len (_fedfa )> 0{_eageg :=_fedfa [0];for _ ,_ccgc :=range _fedfa [1:]{if _ccgc .Ury >=_eageg .Ury {_eageg =_ccgc ;};};for _ ,_dfeg :=range _fedfa {if _dfeg !=_eageg &&_dfeg .Ury > _eageg .Lly {_eageg =nil ;
break ;};};if _eageg !=nil &&_dfbaf (_fegd .PdfRectangle ,_eageg .PdfRectangle ){_fegd ._begda =_eageg ;};};if len (_agcfc )> 0{_gedgga :=_agcfc [0];for _ ,_fedfc :=range _agcfc [1:]{if _fedfc .Lly <=_gedgga .Lly {_gedgga =_fedfc ;};};for _ ,_adfg :=range _agcfc {if _adfg !=_gedgga &&_adfg .Lly < _gedgga .Ury {_gedgga =nil ;
break ;};};if _gedgga !=nil &&_dfbaf (_fegd .PdfRectangle ,_gedgga .PdfRectangle ){_fegd ._gaegg =_gedgga ;};};};for _ ,_afeac :=range _ggeec {if _afeac ._ffeb !=nil &&_afeac ._ffeb ._beggg !=_afeac {_afeac ._ffeb =nil ;};if _afeac ._gaegg !=nil &&_afeac ._gaegg ._begda !=_afeac {_afeac ._gaegg =nil ;
};if _afeac ._beggg !=nil &&_afeac ._beggg ._ffeb !=_afeac {_afeac ._beggg =nil ;};if _afeac ._begda !=nil &&_afeac ._begda ._gaegg !=_afeac {_afeac ._begda =nil ;};};};func (_fcgcd *textTable )newTablePara ()*textPara {_fbca :=_fcgcd .computeBbox ();_dddf :=&textPara {PdfRectangle :_fbca ,_abfgf :_fbca ,_gddb :_fcgcd };
if _bega {_bg .Log .Info ("\u006e\u0065w\u0054\u0061\u0062l\u0065\u0050\u0061\u0072\u0061\u003a\u0020\u0025\u0073",_dddf );};return _dddf ;};func _adad (_gebc ,_bbcd *textPara )bool {if _gebc ._efgd ||_bbcd ._efgd {return true ;};return _edbbc (_gebc .depth ()-_bbcd .depth ());
};
// PageText represents the layout of text on a device page.
type PageText struct{_bef []*textMark ;_efcd string ;_ffbe []TextMark ;_aeac []TextTable ;_gdeg _ba .PdfRectangle ;_eebe []pathSection ;_bbb []pathSection ;};type subpath struct{_cgf []_de .Point ;_dage bool ;};func _acgg (_dbcc ,_geac _ba .PdfRectangle )bool {return _dbcc .Llx <=_geac .Llx &&_geac .Urx <=_dbcc .Urx &&_dbcc .Lly <=_geac .Lly &&_geac .Ury <=_dbcc .Ury ;
};func _ccfb (_cdfeg []_bgf .PdfObject )(_cdefg ,_gdgff float64 ,_abcc error ){if len (_cdfeg )!=2{return 0,0,_gb .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 (_cdfeg ));
};_dccgc ,_abcc :=_bgf .GetNumbersAsFloat (_cdfeg );if _abcc !=nil {return 0,0,_abcc ;};return _dccgc [0],_dccgc [1],nil ;};func _dbafg (_cfaba map[int ]intSet )[]int {_ccacb :=make ([]int ,0,len (_cfaba ));for _cgabb :=range _cfaba {_ccacb =append (_ccacb ,_cgabb );
};_gf .Ints (_ccacb );return _ccacb ;};
// 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 (_aabe *PageText )ApplyArea (bbox _ba .PdfRectangle ){_bfbg :=make ([]*textMark ,0,len (_aabe ._bef ));for _ ,_efea :=range _aabe ._bef {if _ceea (_efea .bbox (),bbox ){_bfbg =append (_bfbg ,_efea );};};var _fgb paraList ;_dfca :=len (_bfbg );for _ecdfd :=0;
_ecdfd < 360&&_dfca > 0;_ecdfd +=90{_eea :=make ([]*textMark ,0,len (_bfbg )-_dfca );for _ ,_bff :=range _bfbg {if _bff ._cffe ==_ecdfd {_eea =append (_eea ,_bff );};};if len (_eea )> 0{_gfd :=_ffag (_eea ,_aabe ._gdeg ,nil ,nil );_fgb =append (_fgb ,_gfd ...);
_dfca -=len (_eea );};};_ffaa :=new (_ca .Buffer );_fgb .writeText (_ffaa );_aabe ._efcd =_ffaa .String ();_aabe ._ffbe =_fgb .toTextMarks ();_aabe ._aeac =_fgb .tables ();};func (_afgef paraList )merge ()*textPara {_bg .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 (_afgef ));
if len (_afgef )==0{return nil ;};_afgef .sortReadingOrder ();_fagg :=_afgef [0].PdfRectangle ;_gef :=_afgef [0]._abdg ;for _ ,_bggbb :=range _afgef [1:]{_fagg =_abe (_fagg ,_bggbb .PdfRectangle );_gef =append (_gef ,_bggbb ._abdg ...);};return _aaca (_fagg ,_gef );
};func (_gbeba *textTable )reduceTiling (_edcge gridTiling ,_decd float64 )*textTable {_baffc :=make ([]int ,0,_gbeba ._deee );_agfdd :=make ([]int ,0,_gbeba ._eebbe );_edfdd :=_edcge ._abgd ;_begac :=_edcge ._gbdg ;for _ggbb :=0;_ggbb < _gbeba ._deee ;
_ggbb ++{_geecd :=_ggbb > 0&&_fd .Abs (_begac [_ggbb -1]-_begac [_ggbb ])< _decd &&_gbeba .emptyCompositeRow (_ggbb );if !_geecd {_baffc =append (_baffc ,_ggbb );};};for _eega :=0;_eega < _gbeba ._eebbe ;_eega ++{_dbcf :=_eega < _gbeba ._eebbe -1&&_fd .Abs (_edfdd [_eega +1]-_edfdd [_eega ])< _decd &&_gbeba .emptyCompositeColumn (_eega );
if !_dbcf {_agfdd =append (_agfdd ,_eega );};};if len (_baffc )==_gbeba ._deee &&len (_agfdd )==_gbeba ._eebbe {return _gbeba ;};_ccbcb :=textTable {_dbaada :_gbeba ._dbaada ,_eebbe :len (_agfdd ),_deee :len (_baffc ),_gag :make (map[uint64 ]compositeCell ,len (_agfdd )*len (_baffc ))};
if _bega {_bg .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",_gbeba ._eebbe ,_gbeba ._deee ,len (_agfdd ),len (_baffc ));_bg .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_agfdd );
_bg .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_baffc );};for _gdgd ,_ebgf :=range _baffc {for _eeddb ,_cfdg :=range _agfdd {_eeaf ,_accb :=_gbeba .getComposite (_cfdg ,_ebgf );if len (_eeaf )==0{continue ;
};if _bega {_gb .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_eeddb ,_gdgd ,_cfdg ,_ebgf ,_eedbc (_eeaf .merge ().text (),50));};_ccbcb .putComposite (_eeddb ,_gdgd ,_eeaf ,_accb );
};};return &_ccbcb ;};func (_efcgg *stateStack )empty ()bool {return len (*_efcgg )==0};func (_fafb *wordBag )allWords ()[]*textWord {var _bfgbg []*textWord ;for _ ,_ffeg :=range _fafb ._ffde {_bfgbg =append (_bfgbg ,_ffeg ...);};return _bfgbg ;};func _gacd (_dadd []pathSection ){if _dgda < 0.0{return ;
};if _egg {_bg .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 (_dadd ));};for _deef ,_fdfeb :=range _dadd {for _bgad ,_daafbg :=range _fdfeb ._aead {for _caea ,_bbcca :=range _daafbg ._cgf {_daafbg ._cgf [_caea ]=_de .Point {X :_fbba (_bbcca .X ),Y :_fbba (_bbcca .Y )};
if _egg {_aaga :=_daafbg ._cgf [_caea ];if !_abag (_bbcca ,_aaga ){_egfd :=_de .Point {X :_aaga .X -_bbcca .X ,Y :_aaga .Y -_bbcca .Y };_gb .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",_deef ,_bgad ,_caea ,_bbcca ,_aaga ,_egfd );
};};};};};};
// 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 _ba .PdfRectangle ;
// Font is the font the text was drawn with.
Font *_ba .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 _b .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 _b .Color ;
// Orientation is the text orientation
Orientation int ;};func (_dge *stateStack )push (_ega *textState ){_fffg :=*_ega ;*_dge =append (*_dge ,&_fffg )};func _eedbc (_eeae string ,_debfd int )string {if len (_eeae )< _debfd {return _eeae ;};return _eeae [:_debfd ];};func _acggg (_fafbg _ba .PdfRectangle )rulingKind {_agfd :=_fafbg .Width ();
_gebff :=_fafbg .Height ();if _agfd > _gebff {if _agfd >=_eaggg {return _ced ;};}else {if _gebff >=_eaggg {return _aba ;};};return _fdfb ;};func (_faae rulingList )secMinMax ()(float64 ,float64 ){_gaed ,_eebg :=_faae [0]._fdagf ,_faae [0]._egag ;for _ ,_fdgd :=range _faae [1:]{if _fdgd ._fdagf < _gaed {_gaed =_fdgd ._fdagf ;
};if _fdgd ._egag > _eebg {_eebg =_fdgd ._egag ;};};return _gaed ,_eebg ;};func _bad (_cbe *_fc .ContentStreamOperation )(float64 ,error ){if len (_cbe .Params )!=1{_fdff :=_c .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");
_bg .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",_cbe .Operand ,1,len (_cbe .Params ),_cbe .Params );
return 0.0,_fdff ;};return _bgf .GetNumberAsFloat (_cbe .Params [0]);};func _daec (_febfb *wordBag ,_gccd *textWord ,_gadb float64 )bool {return _febfb .Urx <=_gccd .Llx &&_gccd .Llx < _febfb .Urx +_gadb ;};func (_fcfg *textObject )showText (_bedb []byte )error {return _fcfg .renderText (_bedb )};
func _febc (_accfe []pathSection )rulingList {_gacd (_accfe );if _egg {_bg .Log .Info ("\u006da\u006b\u0065\u0046\u0069l\u006c\u0052\u0075\u006c\u0069n\u0067s\u003a \u0025\u0064\u0020\u0066\u0069\u006c\u006cs",len (_accfe ));};var _fcbd rulingList ;for _ ,_bfcc :=range _accfe {for _ ,_dcea :=range _bfcc ._aead {if !_dcea .isQuadrilateral (){if _egg {_bg .Log .Error ("!\u0069s\u0051\u0075\u0061\u0064\u0072\u0069\u006c\u0061t\u0065\u0072\u0061\u006c: \u0025\u0073",_dcea );
};continue ;};if _gdbf ,_bdag :=_dcea .makeRectRuling (_bfcc .Color );_bdag {_fcbd =append (_fcbd ,_gdbf );}else {if _aggg {_bg .Log .Error ("\u0021\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0073",_dcea );
};};};};if _egg {_bg .Log .Info ("\u006d\u0061\u006b\u0065Fi\u006c\u006c\u0052\u0075\u006c\u0069\u006e\u0067\u0073\u003a\u0020\u0025\u0073",_fcbd .String ());};return _fcbd ;};func (_dff *shapesState )moveTo (_dcc ,_aga float64 ){_dff ._ccbf =true ;_dff ._ccee =_dff .devicePoint (_dcc ,_aga );
if _bgcb {_bg .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",_dcc ,_aga ,_dff ._ccee );};};func _ceea (_acg ,_fcfc _ba .PdfRectangle )bool {return _dfbaf (_acg ,_fcfc )&&_bdfcf (_acg ,_fcfc )};
type compositeCell struct{_ba .PdfRectangle ;paraList ;};func (_fffff paraList )yNeighbours (_feeb float64 )map[*textPara ][]int {_bbbdc :=make ([]event ,2*len (_fffff ));if _feeb ==0{for _debef ,_adfc :=range _fffff {_bbbdc [2*_debef ]=event {_adfc .Lly ,true ,_debef };
_bbbdc [2*_debef +1]=event {_adfc .Ury ,false ,_debef };};}else {for _fffb ,_agfeg :=range _fffff {_bbbdc [2*_fffb ]=event {_agfeg .Lly -_feeb *_agfeg .fontsize (),true ,_fffb };_bbbdc [2*_fffb +1]=event {_agfeg .Ury +_feeb *_agfeg .fontsize (),false ,_fffb };
};};return _fffff .eventNeighbours (_bbbdc );};func (_aacb *textPara )fontsize ()float64 {return _aacb ._abdg [0]._bcca };func (_acbb *textPara )writeCellText (_fafd _d .Writer ){for _dgbb ,_addc :=range _acbb ._abdg {_ccae :=_addc .text ();_bgab :=_fddc &&_addc .endsInHyphen ()&&_dgbb !=len (_acbb ._abdg )-1;
if _bgab {_ccae =_gcae (_ccae );};_fafd .Write ([]byte (_ccae ));if !(_bgab ||_dgbb ==len (_acbb ._abdg )-1){_fafd .Write ([]byte (_ffdc (_addc ._bgb ,_acbb ._abdg [_dgbb +1]._bgb )));};};};func (_fffd compositeCell )split (_dfcdb ,_gegf []float64 )*textTable {_eabd :=len (_dfcdb )+1;
_fdeg :=len (_gegf )+1;if _bega {_bg .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",_fdeg ,_eabd ,_fffd ,_dfcdb ,_gegf );
_gb .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u0070\u0061\u0072\u0061\u0073\u000a",len (_fffd .paraList ));for _cgbe ,_deda :=range _fffd .paraList {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cgbe ,_deda .String ());};_gb .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u000a",len (_fffd .lines ()));
for _cggcc ,_afcb :=range _fffd .lines (){_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cggcc ,_afcb );};};_dfcdb =_ffbg (_dfcdb ,_fffd .Ury ,_fffd .Lly );_gegf =_ffbg (_gegf ,_fffd .Llx ,_fffd .Urx );_ffagd :=make (map[uint64 ]*textPara ,_fdeg *_eabd );
_ggba :=textTable {_eebbe :_fdeg ,_deee :_eabd ,_aagbe :_ffagd };_dgbg :=_fffd .paraList ;_gf .Slice (_dgbg ,func (_fcde ,_ecac int )bool {_cgeag ,_cbegg :=_dgbg [_fcde ],_dgbg [_ecac ];_afcfa ,_cbdc :=_cgeag .Lly ,_cbegg .Lly ;if _afcfa !=_cbdc {return _afcfa < _cbdc ;
};return _cgeag .Llx < _cbegg .Llx ;});_gaee :=make (map[uint64 ]_ba .PdfRectangle ,_fdeg *_eabd );for _cgaa ,_cacaf :=range _dfcdb [1:]{_cfcf :=_dfcdb [_cgaa ];for _ggad ,_fbec :=range _gegf [1:]{_gafd :=_gegf [_ggad ];_gaee [_fgef (_ggad ,_cgaa )]=_ba .PdfRectangle {Llx :_gafd ,Urx :_fbec ,Lly :_cacaf ,Ury :_cfcf };
};};if _bega {_bg .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");_gb .Printf ("\u0020\u0020\u0020\u0020");for _dcfb :=0;_dcfb < _fdeg ;_dcfb ++{_gb .Printf ("\u0025\u0033\u0030\u0064\u002c\u0020",_dcfb );
};_gb .Println ();for _gfbd :=0;_gfbd < _eabd ;_gfbd ++{_gb .Printf ("\u0020\u0020\u0025\u0032\u0064\u003a",_gfbd );for _debgb :=0;_debgb < _fdeg ;_debgb ++{_gb .Printf ("\u00256\u002e\u0032\u0066\u002c\u0020",_gaee [_fgef (_debgb ,_gfbd )]);};_gb .Println ();
};};_adb :=func (_ggbad *textLine )(int ,int ){for _bgda :=0;_bgda < _eabd ;_bgda ++{for _bbea :=0;_bbea < _fdeg ;_bbea ++{if _acgg (_gaee [_fgef (_bbea ,_bgda )],_ggbad .PdfRectangle ){return _bbea ,_bgda ;};};};return -1,-1;};_cbeb :=make (map[uint64 ][]*textLine ,_fdeg *_eabd );
for _ ,_bbge :=range _dgbg .lines (){_addcb ,_efec :=_adb (_bbge );if _addcb < 0{continue ;};_cbeb [_fgef (_addcb ,_efec )]=append (_cbeb [_fgef (_addcb ,_efec )],_bbge );};for _feef :=0;_feef < len (_dfcdb )-1;_feef ++{_abcg :=_dfcdb [_feef ];_efgf :=_dfcdb [_feef +1];
for _bfc :=0;_bfc < len (_gegf )-1;_bfc ++{_bcce :=_gegf [_bfc ];_ffegg :=_gegf [_bfc +1];_cdbe :=_ba .PdfRectangle {Llx :_bcce ,Urx :_ffegg ,Lly :_efgf ,Ury :_abcg };_fabc :=_cbeb [_fgef (_bfc ,_feef )];if len (_fabc )==0{continue ;};_eadf :=_aaca (_cdbe ,_fabc );
_ggba .put (_bfc ,_feef ,_eadf );};};return &_ggba ;};func _bbac (_dbeac []*textWord ,_dafa int )[]*textWord {_cecfa :=len (_dbeac );copy (_dbeac [_dafa :],_dbeac [_dafa +1:]);return _dbeac [:_cecfa -1];};func (_gfgea *ruling )equals (_deege *ruling )bool {return _gfgea ._gcaeg ==_deege ._gcaeg &&_afde (_gfgea ._feccd ,_deege ._feccd )&&_afde (_gfgea ._fdagf ,_deege ._fdagf )&&_afde (_gfgea ._egag ,_deege ._egag );
};func (_cabc *textObject )setTextRenderMode (_bdec int ){if _cabc ==nil {return ;};_cabc ._ggec ._bgc =RenderMode (_bdec );};func _deaag (_bcbc ,_gffb _de .Point )bool {_fdbce :=_fd .Abs (_bcbc .X -_gffb .X );_agb :=_fd .Abs (_bcbc .Y -_gffb .Y );return _dead (_agb ,_fdbce );
};const _dbg =20;func (_daafb *textLine )appendWord (_geagf *textWord ){_daafb ._eacc =append (_daafb ._eacc ,_geagf );_daafb .PdfRectangle =_abe (_daafb .PdfRectangle ,_geagf .PdfRectangle );if _geagf ._abac > _daafb ._bcca {_daafb ._bcca =_geagf ._abac ;
};if _geagf ._cgcc > _daafb ._bgb {_daafb ._bgb =_geagf ._cgcc ;};};func (_gccdd rulingList )primMinMax ()(float64 ,float64 ){_acdc ,_cagb :=_gccdd [0]._feccd ,_gccdd [0]._feccd ;for _ ,_cgbbe :=range _gccdd [1:]{if _cgbbe ._feccd < _acdc {_acdc =_cgbbe ._feccd ;
}else if _cgbbe ._feccd > _cagb {_cagb =_cgbbe ._feccd ;};};return _acdc ,_cagb ;};func _dfbaf (_caa ,_egfbf _ba .PdfRectangle )bool {return _egfbf .Llx <=_caa .Urx &&_caa .Llx <=_egfbf .Urx ;};type markKind int ;func (_adc *stateStack )top ()*textState {if _adc .empty (){return nil ;
};return (*_adc )[_adc .size ()-1];};func (_gaab lineRuling )yMean ()float64 {return 0.5*(_gaab ._cbac .Y +_gaab ._aeaaf .Y )};const (RenderModeStroke RenderMode =1<<iota ;RenderModeFill ;RenderModeClip ;);func (_gbgba *wordBag )arrangeText ()*textPara {_gbgba .sort ();
if _ddff {_gbgba .removeDuplicates ();};var _ddbed []*textLine ;for _ ,_ebee :=range _gbgba .depthIndexes (){for !_gbgba .empty (_ebee ){_fcdbc :=_gbgba .firstReadingIndex (_ebee );_egdb :=_gbgba .firstWord (_fcdbc );_ebfb :=_ecfb (_gbgba ,_fcdbc );_fccc :=_egdb ._abac ;
_fbdf :=_egdb ._cgcc -_cggc *_fccc ;_afaga :=_egdb ._cgcc +_cggc *_fccc ;_dgff :=_dgfb *_fccc ;_ccfe :=_febb *_fccc ;_dgcc :for {var _edcgb *textWord ;_debgf :=0;for _ ,_fefg :=range _gbgba .depthBand (_fbdf ,_afaga ){_accc :=_gbgba .highestWord (_fefg ,_fbdf ,_afaga );
if _accc ==nil {continue ;};_bgafa :=_dbeb (_accc ,_ebfb ._eacc [len (_ebfb ._eacc )-1]);if _bgafa < -_ccfe {break _dgcc ;};if _bgafa > _dgff {continue ;};if _edcgb !=nil &&_dbea (_accc ,_edcgb )>=0{continue ;};_edcgb =_accc ;_debgf =_fefg ;};if _edcgb ==nil {break ;
};_ebfb .pullWord (_gbgba ,_edcgb ,_debgf );};_ebfb .markWordBoundaries ();_ddbed =append (_ddbed ,_ebfb );};};if len (_ddbed )==0{return nil ;};_gf .Slice (_ddbed ,func (_fdggg ,_afbc int )bool {return _afge (_ddbed [_fdggg ],_ddbed [_afbc ])< 0});_bggc :=_aaca (_gbgba .PdfRectangle ,_ddbed );
if _dcf {_bg .Log .Info ("\u0061\u0072\u0072an\u0067\u0065\u0054\u0065\u0078\u0074\u0020\u0021\u0021\u0021\u0020\u0070\u0061\u0072\u0061\u003d\u0025\u0073",_bggc .String ());if _cgfa {for _cfee ,_dcdc :=range _bggc ._abdg {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cfee ,_dcdc .String ());
if _abbf {for _fcedf ,_bgace :=range _dcdc ._eacc {_gb .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_fcedf ,_bgace .String ());for _babb ,_dggeb :=range _bgace ._ddfa {_gb .Printf ("\u00251\u0032\u0064\u003a\u0020\u0025\u0073\n",_babb ,_dggeb .String ());
};};};};};};return _bggc ;};func (_acgc paraList )topoOrder ()[]int {if _fbgd {_bg .Log .Info ("\u0074\u006f\u0070\u006f\u004f\u0072\u0064\u0065\u0072\u003a");};_afae :=len (_acgc );_fcfd :=make ([]bool ,_afae );_ggce :=make ([]int ,0,_afae );_edac :=_acgc .llyOrdering ();
var _acfb func (_gba int );_acfb =func (_edda int ){_fcfd [_edda ]=true ;for _abgb :=0;_abgb < _afae ;_abgb ++{if !_fcfd [_abgb ]{if _acgc .readBefore (_edac ,_edda ,_abgb ){_acfb (_abgb );};};};_ggce =append (_ggce ,_edda );};for _aggc :=0;_aggc < _afae ;
_aggc ++{if !_fcfd [_aggc ]{_acfb (_aggc );};};return _gfgd (_ggce );};func (_bbfg paraList )reorder (_abeb []int ){_cgae :=make (paraList ,len (_bbfg ));for _afda ,_dcgb :=range _abeb {_cgae [_afda ]=_bbfg [_dcgb ];};copy (_bbfg ,_cgae );};func _abag (_ebcc ,_ecbd _de .Point )bool {return _ebcc .X ==_ecbd .X &&_ebcc .Y ==_ecbd .Y };
func (_egdcg rulingList )primaries ()[]float64 {_gaac :=make (map[float64 ]struct{},len (_egdcg ));for _ ,_cabgc :=range _egdcg {_gaac [_cabgc ._feccd ]=struct{}{};};_dgffb :=make ([]float64 ,len (_gaac ));_faab :=0;for _bdeeb :=range _gaac {_dgffb [_faab ]=_bdeeb ;
_faab ++;};_gf .Float64s (_dgffb );return _dgffb ;};
// ImageMark represents an image drawn on a page and its position in device coordinates.
// All coordinates are in device coordinates.
type ImageMark struct{Image *_ba .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 ;};
// String returns a description of `w`.
func (_febba *textWord )String ()string {return _gb .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",_febba ._cgcc ,_febba .PdfRectangle ,_febba ._abac ,_febba ._ecdfc );
};func _abe (_gffae ,_cbed _ba .PdfRectangle )_ba .PdfRectangle {return _ba .PdfRectangle {Llx :_fd .Min (_gffae .Llx ,_cbed .Llx ),Lly :_fd .Min (_gffae .Lly ,_cbed .Lly ),Urx :_fd .Max (_gffae .Urx ,_cbed .Urx ),Ury :_fd .Max (_gffae .Ury ,_cbed .Ury )};
};func _edbbc (_cdggb float64 )bool {return _fd .Abs (_cdggb )< _dbdd };
// 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 (_aggf PageText )ToText ()string {return _aggf .Text ()};func (_fdedd *textPara )taken ()bool {return _fdedd ==nil ||_fdedd ._fcfa };func (_begf *wordBag )pullWord (_decbe *textWord ,_gbce int ,_fadc map[int ]map[*textWord ]struct{}){_begf .PdfRectangle =_abe (_begf .PdfRectangle ,_decbe .PdfRectangle );
if _decbe ._abac > _begf ._dgbc {_begf ._dgbc =_decbe ._abac ;};_begf ._ffde [_gbce ]=append (_begf ._ffde [_gbce ],_decbe );_fadc [_gbce ][_decbe ]=struct{}{};};func (_ebd *wordBag )blocked (_ddce *textWord )bool {if _ddce .Urx < _ebd .Llx {_bdaa :=_aaea (_ddce .PdfRectangle );
_ceed :=_afbec (_ebd .PdfRectangle );if _ebd ._cead .blocks (_bdaa ,_ceed ){if _dadb {_bg .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0078\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_ddce ,_ebd );};return true ;};}else if _ebd .Urx < _ddce .Llx {_agcf :=_aaea (_ebd .PdfRectangle );
_efg :=_afbec (_ddce .PdfRectangle );if _ebd ._cead .blocks (_agcf ,_efg ){if _dadb {_bg .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0078\u2192\u0020:\u0020\u0025\u0073\u0020%s",_ddce ,_ebd );};return true ;};};if _ddce .Ury < _ebd .Lly {_fcgf :=_addf (_ddce .PdfRectangle );
_cfea :=_ffcf (_ebd .PdfRectangle );if _ebd ._bdff .blocks (_fcgf ,_cfea ){if _dadb {_bg .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0079\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_ddce ,_ebd );};return true ;};}else if _ebd .Ury < _ddce .Lly {_ccbff :=_addf (_ebd .PdfRectangle );
_gafb :=_ffcf (_ddce .PdfRectangle );if _ebd ._bdff .blocks (_ccbff ,_gafb ){if _dadb {_bg .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0079\u2192\u0020:\u0020\u0025\u0073\u0020%s",_ddce ,_ebd );};return true ;};};return false ;};func (_gbed intSet )del (_agbc int ){delete (_gbed ,_agbc )};
func (_bceff *textTable )getDown ()paraList {_gafg :=make (paraList ,_bceff ._eebbe );for _dbcg :=0;_dbcg < _bceff ._eebbe ;_dbcg ++{_eace :=_bceff .get (_dbcg ,_bceff ._deee -1)._begda ;if _eace .taken (){return nil ;};_gafg [_dbcg ]=_eace ;};for _bfeb :=0;
_bfeb < _bceff ._eebbe -1;_bfeb ++{if _gafg [_bfeb ]._beggg !=_gafg [_bfeb +1]{return nil ;};};return _gafg ;};func (_eaggf *textTable )markCells (){for _fgabe :=0;_fgabe < _eaggf ._deee ;_fgabe ++{for _agfe :=0;_agfe < _eaggf ._eebbe ;_agfe ++{_deca :=_eaggf .get (_agfe ,_fgabe );
if _deca !=nil {_deca ._fcfa =true ;};};};};func _afge (_cgc ,_ceedb bounded )float64 {_gbef :=_aegeg (_cgc ,_ceedb );if !_edbbc (_gbef ){return _gbef ;};return _dbea (_cgc ,_ceedb );};func _fbba (_gceb float64 )float64 {return _dgda *_fd .Round (_gceb /_dgda )};
func _cfbab (_dbef []*textMark ,_befac _ba .PdfRectangle )[]*textWord {var _abbga []*textWord ;var _adag *textWord ;if _dafg {_bg .Log .Info ("\u006d\u0061\u006beT\u0065\u0078\u0074\u0057\u006f\u0072\u0064\u0073\u003a\u0020\u0025\u0064\u0020\u006d\u0061\u0072\u006b\u0073",len (_dbef ));
};_ecdb :=func (){if _adag !=nil {_eaace :=_adag .computeText ();if !_fcfbc (_eaace ){_adag ._ecdfc =_eaace ;_abbga =append (_abbga ,_adag );if _dafg {_bg .Log .Info ("\u0061\u0064\u0064Ne\u0077\u0057\u006f\u0072\u0064\u003a\u0020\u0025\u0064\u003a\u0020\u0077\u006f\u0072\u0064\u003d\u0025\u0073",len (_abbga )-1,_adag .String ());
for _fgedb ,_dgdae :=range _adag ._ddfa {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_fgedb ,_dgdae .String ());};};};_adag =nil ;};};for _ ,_afgbd :=range _dbef {if _ccfa &&_adag !=nil &&len (_adag ._ddfa )> 0{_agadb :=_adag ._ddfa [len (_adag ._ddfa )-1];
_ebeb ,_dcedf :=_bcba (_afgbd ._acbe );_fdfbe ,_efgff :=_bcba (_agadb ._acbe );if _dcedf &&!_efgff &&_agadb .inDiacriticArea (_afgbd ){_adag .addDiacritic (_ebeb );continue ;};if _efgff &&!_dcedf &&_afgbd .inDiacriticArea (_agadb ){_adag ._ddfa =_adag ._ddfa [:len (_adag ._ddfa )-1];
_adag .appendMark (_afgbd ,_befac );_adag .addDiacritic (_fdfbe );continue ;};};_dggc :=_fcfbc (_afgbd ._acbe );if _dggc {_ecdb ();continue ;};if _adag ==nil &&!_dggc {_adag =_bdfbcd ([]*textMark {_afgbd },_befac );continue ;};_fbfc :=_adag ._abac ;_edeeb :=_fd .Abs (_eba (_befac ,_afgbd )-_adag ._cgcc )/_fbfc ;
_gaadce :=_dbeb (_afgbd ,_adag )/_fbfc ;if _gaadce >=_eeed ||!(-_fcdb <=_gaadce &&_edeeb <=_accfa ){_ecdb ();_adag =_bdfbcd ([]*textMark {_afgbd },_befac );continue ;};_adag .appendMark (_afgbd ,_befac );};_ecdb ();return _abbga ;};func (_bfcf rulingList )snapToGroupsDirection ()rulingList {_bfcf .sortStrict ();
_eaaea :=make (map[*ruling ]rulingList ,len (_bfcf ));_agdf :=_bfcf [0];_cddf :=func (_ccdfb *ruling ){_agdf =_ccdfb ;_eaaea [_agdf ]=rulingList {_ccdfb }};_cddf (_bfcf [0]);for _ ,_ggccc :=range _bfcf [1:]{if _ggccc ._feccd < _agdf ._feccd -_dbdd {_bg .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",_agdf ,_ggccc );
};if _ggccc ._feccd > _agdf ._feccd +_dgfe {_cddf (_ggccc );}else {_eaaea [_agdf ]=append (_eaaea [_agdf ],_ggccc );};};_bbde :=make (map[*ruling ]float64 ,len (_eaaea ));_fdae :=make (map[*ruling ]*ruling ,len (_bfcf ));for _bebf ,_ggdea :=range _eaaea {_bbde [_bebf ]=_ggdea .mergePrimary ();
for _ ,_ecebe :=range _ggdea {_fdae [_ecebe ]=_bebf ;};};for _ ,_bdaga :=range _bfcf {_bdaga ._feccd =_bbde [_fdae [_bdaga ]];};_bedgd :=make (rulingList ,0,len (_bfcf ));for _ ,_dffc :=range _eaaea {_eggeb :=_dffc .splitSec ();for _bbadf ,_bdfbc :=range _eggeb {_gfab :=_bdfbc .merge ();
if len (_bedgd )> 0{_gbea :=_bedgd [len (_bedgd )-1];if _gbea .alignsPrimary (_gfab )&&_gbea .alignsSec (_gfab ){_bg .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",_bbadf ,_gbea ,_gfab );
continue ;};};_bedgd =append (_bedgd ,_gfab );};};_bedgd .sortStrict ();return _bedgd ;};func (_cbcf *shapesState )lastpointEstablished ()(_de .Point ,bool ){if _cbcf ._ccbf {return _cbcf ._ccee ,false ;};_gebec :=len (_cbcf ._afab );if _gebec > 0&&_cbcf ._afab [_gebec -1]._dage {return _cbcf ._afab [_gebec -1].last (),false ;
};return _de .Point {},true ;};func (_ecb *textPara )bbox ()_ba .PdfRectangle {return _ecb .PdfRectangle };func (_bbba *subpath )removeDuplicates (){if len (_bbba ._cgf )==0{return ;};_cdc :=[]_de .Point {_bbba ._cgf [0]};for _ ,_cdeec :=range _bbba ._cgf [1:]{if !_abag (_cdeec ,_cdc [len (_cdc )-1]){_cdc =append (_cdc ,_cdeec );
};};_bbba ._cgf =_cdc ;};func (_edaeb paraList )findTextTables ()[]*textTable {var _ccbd []*textTable ;for _ ,_eaaag :=range _edaeb {if _eaaag .taken ()||_eaaag .Width ()==0{continue ;};_gggf :=_eaaag .isAtom ();if _gggf ==nil {continue ;};_gggf .growTable ();
if _gggf ._eebbe *_gggf ._deee < _cbabb {continue ;};_gggf .markCells ();_gggf .log ("\u0067\u0072\u006fw\u006e");_ccbd =append (_ccbd ,_gggf );};return _ccbd ;};func (_aegf *wordBag )applyRemovals (_ecec map[int ]map[*textWord ]struct{}){for _bcaa ,_fcd :=range _ecec {if len (_fcd )==0{continue ;
};_aaafe :=_aegf ._ffde [_bcaa ];_cfag :=len (_aaafe )-len (_fcd );if _cfag ==0{delete (_aegf ._ffde ,_bcaa );continue ;};_gbgbd :=make ([]*textWord ,_cfag );_ddaac :=0;for _ ,_ffff :=range _aaafe {if _ ,_aeb :=_fcd [_ffff ];!_aeb {_gbgbd [_ddaac ]=_ffff ;
_ddaac ++;};};_aegf ._ffde [_bcaa ]=_gbgbd ;};};func (_gcbg *textLine )toTextMarks (_gdd *int )[]TextMark {var _gedd []TextMark ;for _ ,_dcfd :=range _gcbg ._eacc {if _dcfd ._eccda {_gedd =_bacfb (_gedd ,_gdd ,"\u0020");};_abbc :=_dcfd .toTextMarks (_gdd );
_gedd =append (_gedd ,_abbc ...);};return _gedd ;};func _gffa (_fga *Extractor ,_caf *_ba .PdfPageResources ,_bdae _fc .GraphicsState ,_fef *textState ,_gcf *stateStack )*textObject {return &textObject {_aed :_fga ,_afbe :_caf ,_ade :_bdae ,_fgfa :_gcf ,_ggec :_fef ,_bedc :_de .IdentityMatrix (),_aac :_de .IdentityMatrix ()};
};
// String returns a human readable description of `path`.
func (_dceg *subpath )String ()string {_gbbd :=_dceg ._cgf ;_efce :=len (_gbbd );if _efce <=5{return _gb .Sprintf ("\u0025d\u003a\u0020\u0025\u0036\u002e\u0032f",_efce ,_gbbd );};return _gb .Sprintf ("\u0025d\u003a\u0020\u0025\u0036.\u0032\u0066\u0020\u0025\u0036.\u0032f\u0020.\u002e\u002e\u0020\u0025\u0036\u002e\u0032f",_efce ,_gbbd [0],_gbbd [1],_gbbd [_efce -1]);
};func (_ffge *textTable )getRight ()paraList {_cgeff :=make (paraList ,_ffge ._deee );for _ccag :=0;_ccag < _ffge ._deee ;_ccag ++{_cgega :=_ffge .get (_ffge ._eebbe -1,_ccag )._beggg ;if _cgega .taken (){return nil ;};_cgeff [_ccag ]=_cgega ;};for _bcfd :=0;
_bcfd < _ffge ._deee -1;_bcfd ++{if _cgeff [_bcfd ]._begda !=_cgeff [_bcfd +1]{return nil ;};};return _cgeff ;};
// 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 _bfff (_cgbb float64 ,_aeafd int )int {if _aeafd ==0{_aeafd =1;};_egge :=float64 (_aeafd );return int (_fd .Round (_cgbb /_egge )*_egge );};func (_fgdc gridTile )numBorders ()int {_fcgc :=0;if _fgdc ._effc {_fcgc ++;};if _fgdc ._cbgf {_fcgc ++;
};if _fgdc ._ebgg {_fcgc ++;};if _fgdc ._ggbd {_fcgc ++;};return _fcgc ;};
// String returns a description of `state`.
func (_cegg *textState )String ()string {_dcgd :="\u005bN\u004f\u0054\u0020\u0053\u0045\u0054]";if _cegg ._fea !=nil {_dcgd =_cegg ._fea .BaseFont ();};return _gb .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",_cegg ._ccba ,_cegg ._edbc ,_cegg ._cabe ,_dcgd );
};func _bdee (_dbd _ba .PdfRectangle )textState {return textState {_ecfe :100,_bgc :RenderModeFill ,_aeaf :_dbd };};func (_bfdd paraList )writeText (_cbfc _d .Writer ){for _agab ,_cccb :=range _bfdd {if _cccb ._efgd {continue ;};_cccb .writeText (_cbfc );
if _agab !=len (_bfdd )-1{if _adad (_cccb ,_bfdd [_agab +1]){_cbfc .Write ([]byte ("\u0020"));}else {_cbfc .Write ([]byte ("\u000a"));_cbfc .Write ([]byte ("\u000a"));};};};_cbfc .Write ([]byte ("\u000a"));_cbfc .Write ([]byte ("\u000a"));};
// String returns a description of `l`.
func (_agad *textLine )String ()string {return _gb .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",_agad ._bgb ,_agad .PdfRectangle ,_agad ._bcca ,_agad .text ());
};func (_bffg *wordBag )firstReadingIndex (_adf int )int {_gfdg :=_bffg .firstWord (_adf )._abac ;_decb :=float64 (_adf +1)*_bfd ;_babag :=_decb +_caca *_gfdg ;_dbfca :=_adf ;for _ ,_ebcf :=range _bffg .depthBand (_decb ,_babag ){if _dbea (_bffg .firstWord (_ebcf ),_bffg .firstWord (_dbfca ))< 0{_dbfca =_ebcf ;
};};return _dbfca ;};func (_agge *subpath )add (_cfa ..._de .Point ){_agge ._cgf =append (_agge ._cgf ,_cfa ...)};
// 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 (_fcga *Extractor )ExtractPageText ()(*PageText ,int ,int ,error ){_bge ,_bgd ,_gcd ,_fgcg :=_fcga .extractPageText (_fcga ._eg ,_fcga ._gc ,_de .IdentityMatrix (),0);if _fgcg !=nil &&_fgcg !=_ba .ErrColorOutOfRange {return nil ,0,0,_fgcg ;};_bge .computeViews ();
_fgcg =_cfbad (_bge );if _fgcg !=nil {return nil ,0,0,_fgcg ;};return _bge ,_bgd ,_gcd ,nil ;};func (_edcf *textTable )toTextTable ()TextTable {if _bega {_bg .Log .Info ("t\u006fT\u0065\u0078\u0074\u0054\u0061\u0062\u006c\u0065:\u0020\u0025\u0064\u0020x \u0025\u0064",_edcf ._eebbe ,_edcf ._deee );
};_abfb :=make ([][]TableCell ,_edcf ._deee );for _edgc :=0;_edgc < _edcf ._deee ;_edgc ++{_abfb [_edgc ]=make ([]TableCell ,_edcf ._eebbe );for _ggcac :=0;_ggcac < _edcf ._eebbe ;_ggcac ++{_eabg :=_edcf .get (_ggcac ,_edgc );if _eabg ==nil {continue ;
};if _bega {_gb .Printf ("\u0025\u0034\u0064 \u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_ggcac ,_edgc ,_eabg );};_abfb [_edgc ][_ggcac ].Text =_eabg .text ();_gbee :=0;_abfb [_edgc ][_ggcac ].Marks ._bdf =_eabg .toTextMarks (&_gbee );};};return TextTable {W :_edcf ._eebbe ,H :_edcf ._deee ,Cells :_abfb };
};func (_fcfab paraList )findGridTables (_cfagb []gridTiling )[]*textTable {if _bega {_bg .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 (_fcfab ));
for _cdea ,_dcfbe :=range _fcfab {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cdea ,_dcfbe );};};var _eeeda []*textTable ;for _edgg ,_gegd :=range _cfagb {_gdbcd ,_agba :=_fcfab .findTableGrid (_gegd );if _gdbcd !=nil {_gdbcd .log (_gb .Sprintf ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0057\u0069\u0074\u0068\u0047\u0072\u0069\u0064\u0073\u003a\u0020%\u0064",_edgg ));
_eeeda =append (_eeeda ,_gdbcd );_gdbcd .markCells ();};for _afea :=range _agba {_afea ._fcfa =true ;};};if _bega {_bg .Log .Info ("\u0066i\u006e\u0064\u0047\u0072i\u0064\u0054\u0061\u0062\u006ce\u0073:\u0020%\u0064\u0020\u0074\u0061\u0062\u006c\u0065s",len (_eeeda ));
};return _eeeda ;};func (_deeda *textTable )put (_bfbde ,_abea int ,_fdcf *textPara ){_deeda ._aagbe [_fgef (_bfbde ,_abea )]=_fdcf ;};func (_gea *textObject )getFontDict (_gfb string )(_abf _bgf .PdfObject ,_gbe error ){_bga :=_gea ._afbe ;if _bga ==nil {_bg .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",_gfb );
return nil ,nil ;};_abf ,_ecde :=_bga .GetFontByName (_bgf .PdfObjectName (_gfb ));if !_ecde {_bg .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",_gfb );
return nil ,_c .New ("f\u006f\u006e\u0074\u0020no\u0074 \u0069\u006e\u0020\u0072\u0065s\u006f\u0075\u0072\u0063\u0065\u0073");};return _abf ,nil ;};func (_adabc *ruling )gridIntersecting (_fcgg *ruling )bool {return _afde (_adabc ._fdagf ,_fcgg ._fdagf )&&_afde (_adabc ._egag ,_fcgg ._egag );
};func (_dgbeg rulingList )toGrids ()[]rulingList {if _egg {_bg .Log .Info ("t\u006f\u0047\u0072\u0069\u0064\u0073\u003a\u0020\u0025\u0073",_dgbeg );};_fead :=_dgbeg .intersections ();if _egg {_bg .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 (_dgbeg ),len (_fead ));
for _ ,_fdcb :=range _dbafg (_fead ){_gb .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_fdcb ,_fead [_fdcb ]);};};_abdcg :=make (map[int ]intSet ,len (_dgbeg ));for _fbbf :=range _dgbeg {_ecbb :=_dgbeg .connections (_fead ,_fbbf );if len (_ecbb )> 0{_abdcg [_fbbf ]=_ecbb ;
};};if _egg {_bg .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0063\u006fn\u006e\u0065\u0063\u0074s=\u0025\u0064",len (_abdcg ));for _ ,_deaeb :=range _dbafg (_abdcg ){_gb .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_deaeb ,_abdcg [_deaeb ]);
};};_bdfbe :=_bfecc (len (_dgbeg ),func (_faac ,_febg int )bool {_egcb ,_dade :=len (_abdcg [_faac ]),len (_abdcg [_febg ]);if _egcb !=_dade {return _egcb > _dade ;};return _dgbeg .comp (_faac ,_febg );});if _egg {_bg .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u006f\u0072d\u0065\u0072\u0069\u006eg=\u0025\u0076",_bdfbe );
};_agea :=[][]int {{_bdfbe [0]}};_dfdec :for _ ,_afca :=range _bdfbe [1:]{for _gcde ,_fcaf :=range _agea {for _ ,_cadbd :=range _fcaf {if _abdcg [_cadbd ].has (_afca ){_agea [_gcde ]=append (_fcaf ,_afca );continue _dfdec ;};};};_agea =append (_agea ,[]int {_afca });
};if _egg {_bg .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020i\u0067\u0072i\u0064\u0073\u003d\u0025\u0076",_agea );};_gf .SliceStable (_agea ,func (_dabe ,_fbfg int )bool {return len (_agea [_dabe ])> len (_agea [_fbfg ])});for _ ,_eebb :=range _agea {_gf .Slice (_eebb ,func (_ceb ,_agcd int )bool {return _dgbeg .comp (_eebb [_ceb ],_eebb [_agcd ])});
};_egaf :=make ([]rulingList ,len (_agea ));for _gdca ,_cefb :=range _agea {_bdad :=make (rulingList ,len (_cefb ));for _daafd ,_efbd :=range _cefb {_bdad [_daafd ]=_dgbeg [_efbd ];};_egaf [_gdca ]=_bdad ;};if _egg {_bg .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020g\u0072\u0069d\u0073\u003d\u0025\u002b\u0076",_egaf );
};var _bfag []rulingList ;for _ ,_bbdb :=range _egaf {if _aefff ,_abbb :=_bbdb .isActualGrid ();_abbb {_bbdb =_aefff ;_bbdb =_bbdb .snapToGroups ();_bfag =append (_bfag ,_bbdb );};};if _egg {_efdbe ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0061\u0063t\u0075\u0061\u006c\u0047ri\u0064\u0073",_bfag );
_bg .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 (_egaf ),len (_bfag ));};return _bfag ;};
// New returns an Extractor instance for extracting content from the input PDF page.
func New (page *_ba .PdfPage )(*Extractor ,error ){const _gfa ="\u0065\u0078\u0074\u0072\u0061\u0063\u0074\u006f\u0072\u002e\u004e\u0065\u0077";_abg ,_gfac :=page .GetAllContentStreams ();if _gfac !=nil {return nil ,_gfac ;};_fgc ,_gfac :=page .GetMediaBox ();
if _gfac !=nil {return nil ,_gb .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",_gfac );};_def :=&Extractor {_eg :_abg ,_gc :page .Resources ,_af :*_fgc ,_ac :map[string ]fontEntry {},_fa :map[string ]textResult {}};
if _def ._af .Llx > _def ._af .Urx {_bg .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",_def ._af );
_def ._af .Llx ,_def ._af .Urx =_def ._af .Urx ,_def ._af .Llx ;};if _def ._af .Lly > _def ._af .Ury {_bg .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",_def ._af );
_def ._af .Lly ,_def ._af .Ury =_def ._af .Ury ,_def ._af .Lly ;};_a .TrackUse (_gfa );return _def ,nil ;};func _bfca (_cfed map[int ][]float64 ){if len (_cfed )<=1{return ;};_cfdac :=_fged (_cfed );if _bega {_bg .Log .Info ("\u0066i\u0078C\u0065\u006c\u006c\u0073\u003a \u006b\u0065y\u0073\u003d\u0025\u002b\u0076",_cfdac );
};var _geec ,_aebff int ;for _geec ,_aebff =range _cfdac {if _cfed [_aebff ]!=nil {break ;};};for _ecga ,_afdf :=range _cfdac [_geec :]{_cabd :=_cfed [_afdf ];if _cabd ==nil {continue ;};if _bega {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u006b\u0030\u003d\u0025\u0064\u0020\u006b1\u003d\u0025\u0064\u000a",_geec +_ecga ,_aebff ,_afdf );
};_eaacb :=_cfed [_afdf ];if _eaacb [len (_eaacb )-1]> _cabd [0]{_eaacb [len (_eaacb )-1]=_cabd [0];_cfed [_aebff ]=_eaacb ;};_aebff =_afdf ;};};
// String returns a description of `b`.
func (_gbda *wordBag )String ()string {var _ceff []string ;for _ ,_debd :=range _gbda .depthIndexes (){_dba :=_gbda ._ffde [_debd ];for _ ,_babf :=range _dba {_ceff =append (_ceff ,_babf ._ecdfc );};};return _gb .Sprintf ("\u0025.\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065=\u0025\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0025\u0071",_gbda .PdfRectangle ,_gbda ._dgbc ,len (_ceff ),_ceff );
};func (_aaffc *textTable )bbox ()_ba .PdfRectangle {return _aaffc .PdfRectangle };func (_fdac rulingList )toTilings ()(rulingList ,[]gridTiling ){_fdac .log ("\u0074o\u0054\u0069\u006c\u0069\u006e\u0067s");if len (_fdac )==0{return nil ,nil ;};_fdac =_fdac .tidied ("\u0061\u006c\u006c");
_fdac .log ("\u0074\u0069\u0064\u0069\u0065\u0064");_cgge :=_fdac .toGrids ();_bebd :=make ([]gridTiling ,len (_cgge ));for _cgef ,_eacg :=range _cgge {_bebd [_cgef ]=_eacg .asTiling ();};return _fdac ,_bebd ;};type textWord struct{_ba .PdfRectangle ;_cgcc float64 ;
_ecdfc string ;_ddfa []*textMark ;_abac float64 ;_eccda bool ;};func (_dcac rulingList )sortStrict (){_gf .Slice (_dcac ,func (_acae ,_dfdea int )bool {_cfeeb ,_edacd :=_dcac [_acae ],_dcac [_dfdea ];_deec ,_bddc :=_cfeeb ._gcaeg ,_edacd ._gcaeg ;if _deec !=_bddc {return _deec > _bddc ;
};_dcegb ,_cggad :=_cfeeb ._feccd ,_edacd ._feccd ;if !_edbbc (_dcegb -_cggad ){return _dcegb < _cggad ;};_dcegb ,_cggad =_cfeeb ._fdagf ,_edacd ._fdagf ;if _dcegb !=_cggad {return _dcegb < _cggad ;};return _cfeeb ._egag < _edacd ._egag ;});};var (_edd =_c .New ("\u0074\u0079p\u0065\u0020\u0063h\u0065\u0063\u006b\u0020\u0065\u0072\u0072\u006f\u0072");
_ef =_c .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072"););const _aef =1.0/1000.0;
// Tables returns the tables extracted from the page.
func (_bfba PageText )Tables ()[]TextTable {if _bega {_bg .Log .Info ("\u0054\u0061\u0062\u006c\u0065\u0073\u003a\u0020\u0025\u0064",len (_bfba ._aeac ));};return _bfba ._aeac ;};type shapesState struct{_cca _de .Matrix ;_edee _de .Matrix ;_afab []*subpath ;
_ccbf bool ;_ccee _de .Point ;_bbf *textObject ;};func (_bcab rulingList )asTiling ()gridTiling {if _fcgd {_bg .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 (_bcab ));
};for _ggfe ,_bdagf :=range _bcab [1:]{_abcgf :=_bcab [_ggfe ];if _abcgf .alignsPrimary (_bdagf )&&_abcgf .alignsSec (_bdagf ){_bg .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",_bdagf ,_abcgf );
};};_bcab .sortStrict ();_bcab .log ("\u0073n\u0061\u0070\u0070\u0065\u0064");_fbdcd ,_abgfb :=_bcab .vertsHorzs ();_dddc :=_fbdcd .primaries ();_bcgg :=_abgfb .primaries ();_afce :=len (_dddc )-1;_cffea :=len (_bcgg )-1;if _afce ==0||_cffea ==0{return gridTiling {};
};_bedceb :=_ba .PdfRectangle {Llx :_dddc [0],Urx :_dddc [_afce ],Lly :_bcgg [0],Ury :_bcgg [_cffea ]};if _fcgd {_bg .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 (_fbdcd ));
for _aefb ,_dgacd :=range _fbdcd {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_aefb ,_dgacd );};_bg .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 (_abgfb ));
for _agbb ,_ffab :=range _abgfb {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_agbb ,_ffab );};_bg .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",_afce ,_cffea ,_dddc ,_bcgg );
};_ffeag :=make ([]gridTile ,_afce *_cffea );for _fedf :=_cffea -1;_fedf >=0;_fedf --{_cafg :=_bcgg [_fedf ];_bdce :=_bcgg [_fedf +1];for _dbeba :=0;_dbeba < _afce ;_dbeba ++{_faddg :=_dddc [_dbeba ];_bbeab :=_dddc [_dbeba +1];_ceebf :=_fbdcd .findPrimSec (_faddg ,_cafg );
_ccgd :=_fbdcd .findPrimSec (_bbeab ,_cafg );_decbb :=_abgfb .findPrimSec (_cafg ,_faddg );_aeec :=_abgfb .findPrimSec (_bdce ,_faddg );_cfcfa :=_ba .PdfRectangle {Llx :_faddg ,Urx :_bbeab ,Lly :_cafg ,Ury :_bdce };_dfada :=_egedd (_cfcfa ,_ceebf ,_ccgd ,_decbb ,_aeec );
_ffeag [_fedf *_afce +_dbeba ]=_dfada ;if _fcgd {_gb .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",_dbeba ,_fedf ,_dfada .String (),_dfada .Width (),_dfada .Height ());
};};};if _fcgd {_bg .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",_bedceb );
};_ceege :=make ([]map[float64 ]gridTile ,_cffea );for _aaff :=_cffea -1;_aaff >=0;_aaff --{if _fcgd {_gb .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_aaff );};_ceege [_aaff ]=make (map[float64 ]gridTile ,_afce );for _dfae :=0;_dfae < _afce ;
_dfae ++{_fgdd :=_ffeag [_aaff *_afce +_dfae ];if _fcgd {_gb .Printf ("\u0020\u0020\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dfae ,_fgdd );};if !_fgdd ._effc {continue ;};_egfc :=_dfae ;for _gcef :=_dfae +1;!_fgdd ._cbgf &&_gcef < _afce ;_gcef ++{_ddadc :=_ffeag [_aaff *_afce +_gcef ];
_fgdd .Urx =_ddadc .Urx ;_fgdd ._ggbd =_fgdd ._ggbd ||_ddadc ._ggbd ;_fgdd ._ebgg =_fgdd ._ebgg ||_ddadc ._ebgg ;_fgdd ._cbgf =_ddadc ._cbgf ;if _fcgd {_gb .Printf ("\u0020 \u0020%\u0034\u0064\u003a\u0020\u0025s\u0020\u2192 \u0025\u0073\u000a",_gcef ,_ddadc ,_fgdd );
};_egfc =_gcef ;};if _fcgd {_gb .Printf (" \u0020 \u0025\u0032\u0064\u0020\u002d\u0020\u0025\u0032d\u0020\u2192\u0020\u0025s\n",_dfae ,_egfc ,_fgdd );};_dfae =_egfc ;_ceege [_aaff ][_fgdd .Llx ]=_fgdd ;};};_ecced :=make (map[float64 ]map[float64 ]gridTile ,_cffea );
_cafa :=make (map[float64 ]map[float64 ]struct{},_cffea );for _ffbb :=_cffea -1;_ffbb >=0;_ffbb --{_ecdc :=_ffeag [_ffbb *_afce ].Lly ;_ecced [_ecdc ]=make (map[float64 ]gridTile ,_afce );_cafa [_ecdc ]=make (map[float64 ]struct{},_afce );};if _fcgd {_bg .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",_bedceb );
};for _gdbd :=_cffea -1;_gdbd >=0;_gdbd --{_beba :=_ffeag [_gdbd *_afce ].Lly ;_ggca :=_ceege [_gdbd ];if _fcgd {_gb .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_gdbd );};for _ ,_fcaeb :=range _bdaea (_ggca ){if _ ,_dgce :=_cafa [_beba ][_fcaeb ];
_dgce {continue ;};_dggdg :=_ggca [_fcaeb ];if _fcgd {_gb .Printf (" \u0020\u0020\u0020\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_dggdg .String ());};for _gffd :=_gdbd -1;_gffd >=0;_gffd --{if _dggdg ._ebgg {break ;};_cgac :=_ceege [_gffd ];_edfb ,_ddfb :=_cgac [_fcaeb ];
if !_ddfb {break ;};if _edfb .Urx !=_dggdg .Urx {break ;};_dggdg ._ebgg =_edfb ._ebgg ;_dggdg .Lly =_edfb .Lly ;if _fcgd {_gb .Printf ("\u0020\u0020\u0020\u0020 \u0020\u0020\u0076\u003d\u0025\u0073\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_edfb .String (),_dggdg .String ());
};_cafa [_edfb .Lly ][_edfb .Llx ]=struct{}{};};if _gdbd ==0{_dggdg ._ebgg =true ;};if _dggdg .complete (){_ecced [_beba ][_fcaeb ]=_dggdg ;};};};_bagab :=gridTiling {PdfRectangle :_bedceb ,_abgd :_gdage (_ecced ),_gbdg :_cdeecb (_ecced ),_cfbe :_ecced };
_bagab .log ("\u0043r\u0065\u0061\u0074\u0065\u0064");return _bagab ;};func _bdaea (_aecfd map[float64 ]gridTile )[]float64 {_efdff :=make ([]float64 ,0,len (_aecfd ));for _eada :=range _aecfd {_efdff =append (_efdff ,_eada );};_gf .Float64s (_efdff );
return _efdff ;};func (_dfa *wordBag )scanBand (_bccd string ,_cgea *wordBag ,_gfff func (_fgff *wordBag ,_ddae *textWord )bool ,_bfbb ,_acaa ,_aafc float64 ,_acbd ,_agaf bool )int {_cdbc :=_cgea ._dgbc ;var _aacf map[int ]map[*textWord ]struct{};if !_acbd {_aacf =_dfa .makeRemovals ();
};_cgec :=_cggc *_cdbc ;_eagg :=0;for _ ,_bfg :=range _dfa .depthBand (_bfbb -_cgec ,_acaa +_cgec ){if len (_dfa ._ffde [_bfg ])==0{continue ;};for _ ,_feg :=range _dfa ._ffde [_bfg ]{if !(_bfbb -_cgec <=_feg ._cgcc &&_feg ._cgcc <=_acaa +_cgec ){continue ;
};if !_gfff (_cgea ,_feg ){continue ;};_cbde :=2.0*_fd .Abs (_feg ._abac -_cgea ._dgbc )/(_feg ._abac +_cgea ._dgbc );_ddfc :=_fd .Max (_feg ._abac /_cgea ._dgbc ,_cgea ._dgbc /_feg ._abac );_bfgb :=_fd .Min (_cbde ,_ddfc );if _aafc > 0&&_bfgb > _aafc {continue ;
};if _cgea .blocked (_feg ){continue ;};if !_acbd {_cgea .pullWord (_feg ,_bfg ,_aacf );};_eagg ++;if !_agaf {if _feg ._cgcc < _bfbb {_bfbb =_feg ._cgcc ;};if _feg ._cgcc > _acaa {_acaa =_feg ._cgcc ;};};if _acbd {break ;};};};if !_acbd {_dfa .applyRemovals (_aacf );
};return _eagg ;};func (_dccc *wordBag )removeWord (_dbdf *textWord ,_fdaa int ){_dbgfe :=_dccc ._ffde [_fdaa ];_dbgfe =_dcab (_dbgfe ,_dbdf );if len (_dbgfe )==0{delete (_dccc ._ffde ,_fdaa );}else {_dccc ._ffde [_fdaa ]=_dbgfe ;};};func (_bcaca *wordBag )maxDepth ()float64 {return _bcaca ._cfg -_bcaca .Lly };
func (_adfd gridTiling )complete ()bool {for _ ,_fbaa :=range _adfd ._cfbe {for _ ,_ggceb :=range _fbaa {if !_ggceb .complete (){return false ;};};};return true ;};func (_badg *textWord )bbox ()_ba .PdfRectangle {return _badg .PdfRectangle };
// String returns a string describing the current state of the textState stack.
func (_gcbe *stateStack )String ()string {_cbc :=[]string {_gb .Sprintf ("\u002d\u002d\u002d\u002d f\u006f\u006e\u0074\u0020\u0073\u0074\u0061\u0063\u006b\u003a\u0020\u0025\u0064",len (*_gcbe ))};for _cfb ,_cfbc :=range *_gcbe {_debf :="\u003c\u006e\u0069l\u003e";
if _cfbc !=nil {_debf =_cfbc .String ();};_cbc =append (_cbc ,_gb .Sprintf ("\u0009\u0025\u0032\u0064\u003a\u0020\u0025\u0073",_cfb ,_debf ));};return _fg .Join (_cbc ,"\u000a");};func _egeb (_bfbbg []TextMark ,_bcg *int ,_bfac TextMark )[]TextMark {_bfac .Offset =*_bcg ;
_bfbbg =append (_bfbbg ,_bfac );*_bcg +=len (_bfac .Text );return _bfbbg ;};func (_adaa *wordBag )absorb (_babd *wordBag ){_baf :=_babd .makeRemovals ();for _eedd ,_aege :=range _babd ._ffde {for _ ,_dfbd :=range _aege {_adaa .pullWord (_dfbd ,_eedd ,_baf );
};};_babd .applyRemovals (_baf );};var _ggcbc =_f .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");type textMark struct{_ba .PdfRectangle ;
_cffe int ;_acbe string ;_gcadb string ;_eage *_ba .PdfFont ;_ebeg float64 ;_ggdf float64 ;_gcdf _de .Matrix ;_gdef _de .Point ;_add _ba .PdfRectangle ;_gaa _b .Color ;_bdgc _b .Color ;};func (_cdaa rulingList )merge ()*ruling {_dcbg :=_cdaa [0]._feccd ;
_fbed :=_cdaa [0]._fdagf ;_eagc :=_cdaa [0]._egag ;for _ ,_gbfda :=range _cdaa [1:]{_dcbg +=_gbfda ._feccd ;if _gbfda ._fdagf < _fbed {_fbed =_gbfda ._fdagf ;};if _gbfda ._egag > _eagc {_eagc =_gbfda ._egag ;};};_dcbc :=&ruling {_gcaeg :_cdaa [0]._gcaeg ,_ddcg :_cdaa [0]._ddcg ,Color :_cdaa [0].Color ,_feccd :_dcbg /float64 (len (_cdaa )),_fdagf :_fbed ,_egag :_eagc };
if _bbdcg {_bg .Log .Info ("\u006de\u0072g\u0065\u003a\u0020\u0025\u0032d\u0020\u0076e\u0063\u0073\u0020\u0025\u0073",len (_cdaa ),_dcbc );for _dgfc ,_cceg :=range _cdaa {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dgfc ,_cceg );};
};return _dcbc ;};func (_aebd *textWord )addDiacritic (_dgbca string ){_beggc :=_aebd ._ddfa [len (_aebd ._ddfa )-1];_beggc ._acbe +=_dgbca ;_beggc ._acbe =_ed .NFKC .String (_beggc ._acbe );};func (_cabf *stateStack )size ()int {return len (*_cabf )};
func (_eaeg rulingList )bbox ()_ba .PdfRectangle {var _afed _ba .PdfRectangle ;if len (_eaeg )==0{_bg .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 _ba .PdfRectangle {};};if _eaeg [0]._gcaeg ==_ced {_afed .Llx ,_afed .Urx =_eaeg .secMinMax ();_afed .Lly ,_afed .Ury =_eaeg .primMinMax ();}else {_afed .Llx ,_afed .Urx =_eaeg .primMinMax ();_afed .Lly ,_afed .Ury =_eaeg .secMinMax ();};return _afed ;
};func (_aggbd *ruling )intersects (_cdcaa *ruling )bool {_dfad :=(_aggbd ._gcaeg ==_aba &&_cdcaa ._gcaeg ==_ced )||(_cdcaa ._gcaeg ==_aba &&_aggbd ._gcaeg ==_ced );_egfed :=func (_cfcfc ,_bfbe *ruling )bool {return _cfcfc ._fdagf -_afac <=_bfbe ._feccd &&_bfbe ._feccd <=_cfcfc ._egag +_afac ;
};_cagg :=_egfed (_aggbd ,_cdcaa );_ffbc :=_egfed (_cdcaa ,_aggbd );if _egg {_gb .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",_dfad ,_cagg ,_ffbc ,_dfad &&_cagg &&_ffbc ,_aggbd ,_cdcaa );
};return _dfad &&_cagg &&_ffbc ;};func (_bacf *subpath )clear (){*_bacf =subpath {}};func (_ecdg *wordBag )firstWord (_caga int )*textWord {return _ecdg ._ffde [_caga ][0]};type cachedImage struct{_egf *_ba .Image ;_da _ba .PdfColorspace ;};func _ffbg (_geda []float64 ,_dcaaf ,_bgaceg float64 )[]float64 {_ccfc ,_eaggc :=_dcaaf ,_bgaceg ;
if _eaggc < _ccfc {_ccfc ,_eaggc =_eaggc ,_ccfc ;};_ddbeb :=make ([]float64 ,0,len (_geda )+2);_ddbeb =append (_ddbeb ,_dcaaf );for _ ,_fbge :=range _geda {if _fbge <=_ccfc {continue ;}else if _fbge >=_eaggc {break ;};_ddbeb =append (_ddbeb ,_fbge );};
_ddbeb =append (_ddbeb ,_bgaceg );return _ddbeb ;};
// Extractor stores and offers functionality for extracting content from PDF pages.
type Extractor struct{_eg string ;_gc *_ba .PdfPageResources ;_af _ba .PdfRectangle ;_ac map[string ]fontEntry ;_fa map[string ]textResult ;_ab int64 ;_dc int ;};
// String returns a description of `tm`.
func (_fdba *textMark )String ()string {return _gb .Sprintf ("\u0025\u002e\u0032f \u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\u0022\u0025\u0073\u0022",_fdba .PdfRectangle ,_fdba ._ebeg ,_fdba ._acbe );};func (_bgaa *textLine )markWordBoundaries (){_fcff :=_ddea *_bgaa ._bcca ;
for _dbgd ,_edbcd :=range _bgaa ._eacc [1:]{if _dbeb (_edbcd ,_bgaa ._eacc [_dbgd ])>=_fcff {_edbcd ._eccda =true ;};};};func (_edbcc compositeCell )parasBBox ()(paraList ,_ba .PdfRectangle ){return _edbcc .paraList ,_edbcc .PdfRectangle ;};func (_gedc *ruling )encloses (_dcce ,_ggcba float64 )bool {return _gedc ._fdagf -_afac <=_dcce &&_ggcba <=_gedc ._egag +_afac ;
};
// String returns a human readable description of `ss`.
func (_ebcad *shapesState )String ()string {return _gb .Sprintf ("\u007b\u0025\u0064\u0020su\u0062\u0070\u0061\u0074\u0068\u0073\u0020\u0066\u0072\u0065\u0073\u0068\u003d\u0025t\u007d",len (_ebcad ._afab ),_ebcad ._ccbf );};func (_gbdae rectRuling )asRuling ()(*ruling ,bool ){_edec :=ruling {_gcaeg :_gbdae ._eabda ,Color :_gbdae .Color ,_ddcg :_deae };
switch _gbdae ._eabda {case _aba :_edec ._feccd =0.5*(_gbdae .Llx +_gbdae .Urx );_edec ._fdagf =_gbdae .Lly ;_edec ._egag =_gbdae .Ury ;_bbee ,_bede :=_gbdae .checkWidth (_gbdae .Llx ,_gbdae .Urx );if !_bede {if _aggg {_bg .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",_gbdae );
};return nil ,false ;};_edec ._edaee =_bbee ;case _ced :_edec ._feccd =0.5*(_gbdae .Lly +_gbdae .Ury );_edec ._fdagf =_gbdae .Llx ;_edec ._egag =_gbdae .Urx ;_fcbag ,_aeebe :=_gbdae .checkWidth (_gbdae .Lly ,_gbdae .Ury );if !_aeebe {if _aggg {_bg .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",_gbdae );
};return nil ,false ;};_edec ._edaee =_fcbag ;default:_bg .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_gbdae ._eabda );return nil ,false ;};return &_edec ,true ;};func (_defae rulingList )sort (){_gf .Slice (_defae ,_defae .comp )};
func _aegg (_abgeg []compositeCell )[]float64 {var _fbad []*textLine ;_aaffa :=0;for _ ,_abcbc :=range _abgeg {_aaffa +=len (_abcbc .paraList );_fbad =append (_fbad ,_abcbc .lines ()...);};_gf .Slice (_fbad ,func (_cede ,_aacea int )bool {_bfgg ,_eedf :=_fbad [_cede ],_fbad [_aacea ];
_ccbb ,_ccca :=_bfgg ._bgb ,_eedf ._bgb ;if !_edbbc (_ccbb -_ccca ){return _ccbb < _ccca ;};return _bfgg .Llx < _eedf .Llx ;});if _bega {_gb .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",_aaffa ,len (_fbad ));
for _ceabd ,_dcaa :=range _fbad {_gb .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_ceabd ,_dcaa );};};var _aaef []float64 ;_feefb :=_fbad [0];var _fgee [][]*textLine ;_faba :=[]*textLine {_feefb };for _dfgaf ,_ecca :=range _fbad [1:]{if _ecca .Ury < _feefb .Lly {_gggg :=0.5*(_ecca .Ury +_feefb .Lly );
if _bega {_gb .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",_dfgaf ,_ecca .Ury ,_feefb .Lly ,_gggg ,_feefb ,_ecca );
};_aaef =append (_aaef ,_gggg );_fgee =append (_fgee ,_faba );_faba =nil ;};_faba =append (_faba ,_ecca );if _ecca .Lly < _feefb .Lly {_feefb =_ecca ;};};if len (_faba )> 0{_fgee =append (_fgee ,_faba );};if _bega {_gb .Printf (" \u0020\u0020\u0020\u0020\u0020\u0020 \u0072\u006f\u0077\u0043\u006f\u0072\u0072\u0069\u0064o\u0072\u0073\u003d%\u0036.\u0032\u0066\u000a",_aaef );
};if _bega {_bg .Log .Info ("\u0072\u006f\u0077\u003d\u0025\u0064",len (_abgeg ));for _bbdf ,_bacfbg :=range _abgeg {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_bbdf ,_bacfbg );};_bg .Log .Info ("\u0067r\u006f\u0075\u0070\u0073\u003d\u0025d",len (_fgee ));
for _cbgc ,_bbab :=range _fgee {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0064\u000a",_cbgc ,len (_bbab ));for _gdgg ,_fdcgd :=range _bbab {_gb .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_gdgg ,_fdcgd );};};};_dcga :=true ;for _cgdd ,_baff :=range _fgee {_ccac :=true ;
for _fgaf ,_ebdd :=range _abgeg {if _bega {_gb .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",_cgdd ,len (_fgee ),_fgaf ,len (_abgeg ),_ebdd );
};if !_ebdd .hasLines (_baff ){if _bega {_gb .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",_cgdd ,len (_fgee ),_fgaf ,len (_abgeg ));
};_ccac =false ;break ;};};if !_ccac {_dcga =false ;break ;};};if !_dcga {if _bega {_bg .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");
};_aaef =nil ;};if _bega &&_aaef !=nil {_gb .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",_aaef );};return _aaef ;};
func (_ecae *textTable )isExportable ()bool {if _ecae ._dbaada {return true ;};_cfda :=func (_dfadc int )bool {_eedb :=_ecae .get (0,_dfadc );if _eedb ==nil {return false ;};_fcfb :=_eedb .text ();_gbcb :=_cd .RuneCountInString (_fcfb );_bdgf :=_ggcbc .MatchString (_fcfb );
return _gbcb <=1||_bdgf ;};for _ffec :=0;_ffec < _ecae ._deee ;_ffec ++{if !_cfda (_ffec ){return true ;};};return false ;};const _gcedg =10;func (_fgffa paraList )eventNeighbours (_gfda []event )map[*textPara ][]int {_gf .Slice (_gfda ,func (_gdga ,_faddef int )bool {_bdadd ,_bbedg :=_gfda [_gdga ],_gfda [_faddef ];
_bcbe ,_eebf :=_bdadd ._egbe ,_bbedg ._egbe ;if _bcbe !=_eebf {return _bcbe < _eebf ;};if _bdadd ._dfac !=_bbedg ._dfac {return _bdadd ._dfac ;};return _gdga < _faddef ;});_bbegc :=make (map[int ]intSet );_bfecg :=make (intSet );for _ ,_bdagfe :=range _gfda {if _bdagfe ._dfac {_bbegc [_bdagfe ._fgccb ]=make (intSet );
for _efde :=range _bfecg {if _efde !=_bdagfe ._fgccb {_bbegc [_bdagfe ._fgccb ].add (_efde );_bbegc [_efde ].add (_bdagfe ._fgccb );};};_bfecg .add (_bdagfe ._fgccb );}else {_bfecg .del (_bdagfe ._fgccb );};};_gbgd :=map[*textPara ][]int {};for _cgaae ,_fffa :=range _bbegc {_ccede :=_fgffa [_cgaae ];
if len (_fffa )==0{_gbgd [_ccede ]=nil ;continue ;};_abef :=make ([]int ,len (_fffa ));_adfb :=0;for _dacg :=range _fffa {_abef [_adfb ]=_dacg ;_adfb ++;};_gbgd [_ccede ]=_abef ;};return _gbgd ;};
// Elements returns the TextMarks in `ma`.
func (_bcdf *TextMarkArray )Elements ()[]TextMark {return _bcdf ._bdf };func _cdeb (_bfe _de .Matrix )_de .Point {_defb ,_afag :=_bfe .Translation ();return _de .Point {X :_defb ,Y :_afag };};func _abcb (_ebb bounded )float64 {return -_ebb .bbox ().Lly };
func (_gbgb *textObject )getFontDirect (_dced string )(*_ba .PdfFont ,error ){_cefc ,_egca :=_gbgb .getFontDict (_dced );if _egca !=nil {return nil ,_egca ;};_fag ,_egca :=_ba .NewPdfFontFromPdfObject (_cefc );if _egca !=nil {_bg .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",_dced ,_egca );
};return _fag ,_egca ;};func (_dgec pathSection )bbox ()_ba .PdfRectangle {_bdg :=_dgec ._aead [0]._cgf [0];_baba :=_ba .PdfRectangle {Llx :_bdg .X ,Urx :_bdg .X ,Lly :_bdg .Y ,Ury :_bdg .Y };_baef :=func (_bgfb _de .Point ){if _bgfb .X < _baba .Llx {_baba .Llx =_bgfb .X ;
}else if _bgfb .X > _baba .Urx {_baba .Urx =_bgfb .X ;};if _bgfb .Y < _baba .Lly {_baba .Lly =_bgfb .Y ;}else if _bgfb .Y > _baba .Ury {_baba .Ury =_bgfb .Y ;};};for _ ,_caceb :=range _dgec ._aead [0]._cgf [1:]{_baef (_caceb );};for _ ,_acb :=range _dgec ._aead [1:]{for _ ,_ddg :=range _acb ._cgf {_baef (_ddg );
};};return _baba ;};func (_ggf *textObject )setTextRise (_baee float64 ){if _ggf ==nil {return ;};_ggf ._ggec ._eae =_baee ;};func (_fdfe *imageExtractContext )extractXObjectImage (_ccd *_bgf .PdfObjectName ,_dca _fc .GraphicsState ,_ag *_ba .PdfPageResources )error {_fceb ,_ :=_ag .GetXObjectByName (*_ccd );
if _fceb ==nil {return nil ;};_cg ,_deb :=_fdfe ._gbf [_fceb ];if !_deb {_gbfg ,_bb :=_ag .GetXObjectImageByName (*_ccd );if _bb !=nil {return _bb ;};if _gbfg ==nil {return nil ;};_aaa ,_bb :=_gbfg .ToImage ();if _bb !=nil {return _bb ;};_cg =&cachedImage {_egf :_aaa ,_da :_gbfg .ColorSpace };
_fdfe ._gbf [_fceb ]=_cg ;};_feb :=_cg ._egf ;_ece :=_cg ._da ;_afg ,_fgf :=_ece .ImageToRGB (*_feb );if _fgf !=nil {return _fgf ;};_bg .Log .Debug ("@\u0044\u006f\u0020\u0043\u0054\u004d\u003a\u0020\u0025\u0073",_dca .CTM .String ());_cb :=ImageMark {Image :&_afg ,Width :_dca .CTM .ScalingFactorX (),Height :_dca .CTM .ScalingFactorY (),Angle :_dca .CTM .Angle ()};
_cb .X ,_cb .Y =_dca .CTM .Translation ();_fdfe ._bac =append (_fdfe ._bac ,_cb );_fdfe ._fcb ++;return nil ;};func (_ffba paraList )toTextMarks ()[]TextMark {_bgdb :=0;var _eaae []TextMark ;for _afagb ,_daffc :=range _ffba {if _daffc ._efgd {continue ;
};_aeeb :=_daffc .toTextMarks (&_bgdb );_eaae =append (_eaae ,_aeeb ...);if _afagb !=len (_ffba )-1{if _adad (_daffc ,_ffba [_afagb +1]){_eaae =_bacfb (_eaae ,&_bgdb ,"\u0020");}else {_eaae =_bacfb (_eaae ,&_bgdb ,"\u000a");_eaae =_bacfb (_eaae ,&_bgdb ,"\u000a");
};};};_eaae =_bacfb (_eaae ,&_bgdb ,"\u000a");_eaae =_bacfb (_eaae ,&_bgdb ,"\u000a");return _eaae ;};func (_becd *textWord )appendMark (_fcad *textMark ,_dfgb _ba .PdfRectangle ){_becd ._ddfa =append (_becd ._ddfa ,_fcad );_becd .PdfRectangle =_abe (_becd .PdfRectangle ,_fcad .PdfRectangle );
if _fcad ._ebeg > _becd ._abac {_becd ._abac =_fcad ._ebeg ;};_becd ._cgcc =_dfgb .Ury -_becd .PdfRectangle .Lly ;};func (_eag *imageExtractContext )processOperand (_cac *_fc .ContentStreamOperation ,_ce _fc .GraphicsState ,_ccc *_ba .PdfPageResources )error {if _cac .Operand =="\u0042\u0049"&&len (_cac .Params )==1{_fcg ,_egd :=_cac .Params [0].(*_fc .ContentStreamInlineImage );
if !_egd {return nil ;};if _dad ,_fb :=_bgf .GetBoolVal (_fcg .ImageMask );_fb {if _dad &&!_eag ._cc .IncludeInlineStencilMasks {return nil ;};};return _eag .extractInlineImage (_fcg ,_ce ,_ccc );}else if _cac .Operand =="\u0044\u006f"&&len (_cac .Params )==1{_aa ,_dgb :=_bgf .GetName (_cac .Params [0]);
if !_dgb {_bg .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0079\u0070\u0065");return _edd ;};_ ,_dcg :=_ccc .GetXObjectByName (*_aa );switch _dcg {case _ba .XObjectTypeImage :return _eag .extractXObjectImage (_aa ,_ce ,_ccc );case _ba .XObjectTypeForm :return _eag .extractFormImages (_aa ,_ce ,_ccc );
};};return nil ;};func (_adfed rulingList )blocks (_cbggf ,_bdbg *ruling )bool {if _cbggf ._fdagf > _bdbg ._egag ||_bdbg ._fdagf > _cbggf ._egag {return false ;};_cfdd :=_fd .Max (_cbggf ._fdagf ,_bdbg ._fdagf );_dccbb :=_fd .Min (_cbggf ._egag ,_bdbg ._egag );
if _cbggf ._feccd > _bdbg ._feccd {_cbggf ,_bdbg =_bdbg ,_cbggf ;};for _ ,_ceced :=range _adfed {if _cbggf ._feccd <=_ceced ._feccd +_dgfe &&_ceced ._feccd <=_bdbg ._feccd +_dgfe &&_ceced ._fdagf <=_dccbb &&_cfdd <=_ceced ._egag {return true ;};};return false ;
};
// String returns a string describing `tm`.
func (_faec TextMark )String ()string {_bbad :=_faec .BBox ;var _aegd string ;if _faec .Font !=nil {_aegd =_faec .Font .String ();if len (_aegd )> 50{_aegd =_aegd [:50]+"\u002e\u002e\u002e";};};var _afagg string ;if _faec .Meta {_afagg ="\u0020\u002a\u004d\u002a";
};return _gb .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",_faec .Offset ,_faec .Text ,[]rune (_faec .Text ),_bbad .Llx ,_bbad .Lly ,_bbad .Urx ,_bbad .Ury ,_aegd ,_afagg );
};var _ebg =TextMark {Text :"\u005b\u0058\u005d",Original :"\u0020",Meta :true ,FillColor :_b .White ,StrokeColor :_b .White };func _aaea (_baac _ba .PdfRectangle )*ruling {return &ruling {_gcaeg :_aba ,_feccd :_baac .Urx ,_fdagf :_baac .Lly ,_egag :_baac .Ury };
};func _dbeb (_cbaa ,_feaa bounded )float64 {return _cbaa .bbox ().Llx -_feaa .bbox ().Urx };func (_cde *stateStack )pop ()*textState {if _cde .empty (){return nil ;};_cea :=*(*_cde )[len (*_cde )-1];*_cde =(*_cde )[:len (*_cde )-1];return &_cea ;};func _afbec (_fded _ba .PdfRectangle )*ruling {return &ruling {_gcaeg :_aba ,_feccd :_fded .Llx ,_fdagf :_fded .Lly ,_egag :_fded .Ury };
};func _fgef (_ecgg ,_bfce int )uint64 {return uint64 (_ecgg )*0x1000000+uint64 (_bfce )};func (_dce *textObject )setHorizScaling (_daa float64 ){if _dce ==nil {return ;};_dce ._ggec ._ecfe =_daa ;};func _fbcga (_badf int ,_fcbdd map[int ][]float64 )([]int ,int ){_bbcda :=make ([]int ,_badf );
_ddbb :=0;for _gdgbd :=0;_gdgbd < _badf ;_gdgbd ++{_bbcda [_gdgbd ]=_ddbb ;_ddbb +=len (_fcbdd [_gdgbd ])+1;};return _bbcda ,_ddbb ;};func _ffcf (_cbb _ba .PdfRectangle )*ruling {return &ruling {_gcaeg :_ced ,_feccd :_cbb .Lly ,_fdagf :_cbb .Llx ,_egag :_cbb .Urx };
};func (_ddc *textObject )showTextAdjusted (_cf *_bgf .PdfObjectArray )error {_gecb :=false ;for _ ,_febf :=range _cf .Elements (){switch _febf .(type ){case *_bgf .PdfObjectFloat ,*_bgf .PdfObjectInteger :_daff ,_gfc :=_bgf .GetNumberAsFloat (_febf );
if _gfc !=nil {_bg .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",_febf ,_cf );
return _gfc ;};_fff ,_cce :=-_daff *0.001*_ddc ._ggec ._cabe ,0.0;if _gecb {_cce ,_fff =_fff ,_cce ;};_ddcc :=_gac (_de .Point {X :_fff ,Y :_cce });_ddc ._bedc .Concat (_ddcc );case *_bgf .PdfObjectString :_cabg ,_ggcd :=_bgf .GetStringBytes (_febf );if !_ggcd {_bg .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",_febf ,_cf );
return _bgf .ErrTypeError ;};_ddc .renderText (_cabg );default:_bg .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",_febf ,_cf );
return _bgf .ErrTypeError ;};};return nil ;};func (_gbb *imageExtractContext )extractContentStreamImages (_fce string ,_afa *_ba .PdfPageResources )error {_db :=_fc .NewContentStreamParser (_fce );_dgg ,_bab :=_db .Parse ();if _bab !=nil {return _bab ;
};if _gbb ._gbf ==nil {_gbb ._gbf =map[*_bgf .PdfObjectStream ]*cachedImage {};};if _gbb ._cc ==nil {_gbb ._cc =&ImageExtractOptions {};};_afe :=_fc .NewContentStreamProcessor (*_dgg );_afe .AddHandler (_fc .HandlerConditionEnumAllOperands ,"",_gbb .processOperand );
return _afe .Process (_afa );};func _bcba (_eeeaf string )(string ,bool ){_gebcf :=[]rune (_eeeaf );if len (_gebcf )!=1{return "",false ;};_aecfdf ,_dcbe :=_cdaee [_gebcf [0]];return _aecfdf ,_dcbe ;};var (_cdaee =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"};
);
// String returns a description of `t`.
func (_gcega *textTable )String ()string {return _gb .Sprintf ("\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u0020\u0025\u0074",_gcega ._eebbe ,_gcega ._deee ,_gcega ._dbaada );};func (_aace *shapesState )closePath (){if _aace ._ccbf {_aace ._afab =append (_aace ._afab ,_dec (_aace ._ccee ));
_aace ._ccbf =false ;}else if len (_aace ._afab )==0{if _bgcb {_bg .Log .Debug ("\u0063\u006c\u006f\u0073eP\u0061\u0074\u0068\u0020\u0077\u0069\u0074\u0068\u0020\u006e\u006f\u0020\u0070\u0061t\u0068");};_aace ._ccbf =false ;return ;};_aace ._afab [len (_aace ._afab )-1].close ();
if _bgcb {_bg .Log .Info ("\u0063\u006c\u006f\u0073\u0065\u0050\u0061\u0074\u0068\u003a\u0020\u0025\u0073",_aace );};};func (_bdd *textObject )setWordSpacing (_eeb float64 ){if _bdd ==nil {return ;};_bdd ._ggec ._edbc =_eeb ;};func _egedd (_ecaf _ba .PdfRectangle ,_cgab ,_acfbe ,_fgcad ,_gcbeb *ruling )gridTile {_ggef :=_ecaf .Llx ;
_adadd :=_ecaf .Urx ;_ddgf :=_ecaf .Lly ;_fdbcg :=_ecaf .Ury ;return gridTile {PdfRectangle :_ecaf ,_effc :_cgab !=nil &&_cgab .encloses (_ddgf ,_fdbcg ),_cbgf :_acfbe !=nil &&_acfbe .encloses (_ddgf ,_fdbcg ),_ebgg :_fgcad !=nil &&_fgcad .encloses (_ggef ,_adadd ),_ggbd :_gcbeb !=nil &&_gcbeb .encloses (_ggef ,_adadd )};
};func _bdacc (_eecg *wordBag ,_ebec float64 ,_dccb ,_bgde rulingList )[]*wordBag {var _ebedd []*wordBag ;for _ ,_aee :=range _eecg .depthIndexes (){_ccec :=false ;for !_eecg .empty (_aee ){_bfgbc :=_eecg .firstReadingIndex (_aee );_gbfd :=_eecg .firstWord (_bfgbc );
_dffa :=_facg (_gbfd ,_ebec ,_dccb ,_bgde );_eecg .removeWord (_gbfd ,_bfgbc );if _aggb {_bg .Log .Info ("\u0066\u0069\u0072\u0073\u0074\u0057\u006f\u0072\u0064\u0020\u005e\u005e^\u005e\u0020\u0025\u0073",_gbfd .String ());};for _gdag :=true ;_gdag ;_gdag =_ccec {_ccec =false ;
_aaggb :=_daee *_dffa ._dgbc ;_daae :=_aagb *_dffa ._dgbc ;_cgfc :=_dgaa *_dffa ._dgbc ;if _aggb {_bg .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",_dffa .minDepth (),_dffa .maxDepth (),_cgfc ,_daae );
};if _eecg .scanBand ("\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c",_dffa ,_bece (_cfab ,0),_dffa .minDepth ()-_cgfc ,_dffa .maxDepth ()+_cgfc ,_ffbef ,false ,false )> 0{_ccec =true ;};if _eecg .scanBand ("\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_dffa ,_bece (_cfab ,_daae ),_dffa .minDepth (),_dffa .maxDepth (),_fcdd ,false ,false )> 0{_ccec =true ;
};if _ccec {continue ;};_agf :=_eecg .scanBand ("",_dffa ,_bece (_daec ,_aaggb ),_dffa .minDepth (),_dffa .maxDepth (),_geg ,true ,false );if _agf > 0{_ccbfg :=(_dffa .maxDepth ()-_dffa .minDepth ())/_dffa ._dgbc ;if (_agf > 1&&float64 (_agf )> 0.3*_ccbfg )||_agf <=10{if _eecg .scanBand ("\u006f\u0074\u0068e\u0072",_dffa ,_bece (_daec ,_aaggb ),_dffa .minDepth (),_dffa .maxDepth (),_geg ,false ,true )> 0{_ccec =true ;
};};};};_ebedd =append (_ebedd ,_dffa );};};return _ebedd ;};type gridTile struct{_ba .PdfRectangle ;_ggbd ,_effc ,_ebgg ,_cbgf bool ;};const (_fdgg =false ;_dafg =false ;_ccf =false ;_dfde =false ;_bgcb =false ;_defa =false ;_aggb =false ;_fbgd =false ;
_dcf =false ;_cgfa =_dcf &&true ;_abbf =_cgfa &&false ;_aecf =_dcf &&true ;_bega =false ;_eged =_bega &&false ;_gcbbd =_bega &&true ;_egg =false ;_ebed =_egg &&false ;_bbdcg =_egg &&false ;_fcgd =_egg &&true ;_aggg =_egg &&false ;_dadb =_egg &&false ;);
func (_fefe rulingList )connections (_ggfc map[int ]intSet ,_dagdg int )intSet {_feab :=make (intSet );_gegb :=make (intSet );var _adfa func (int );_adfa =func (_gega int ){if !_gegb .has (_gega ){_gegb .add (_gega );for _fbbde :=range _fefe {if _ggfc [_fbbde ].has (_gega ){_feab .add (_fbbde );
};};for _bffa :=range _fefe {if _feab .has (_bffa ){_adfa (_bffa );};};};};_adfa (_dagdg );return _feab ;};const (_fddc =true ;_ddff =true ;_ccfa =true ;_cabfc =false ;_eca =false ;_eee =6;_bdeeg =3.0;_cafdf =200;_bdaf =true ;_bbdce =true ;_caaa =true ;
_dadg =true ;_ggg =false ;);func (_gdaab rulingList )removeDuplicates ()rulingList {if len (_gdaab )==0{return nil ;};_gdaab .sort ();_egade :=rulingList {_gdaab [0]};for _ ,_cgfcb :=range _gdaab [1:]{if _cgfcb .equals (_egade [len (_egade )-1]){continue ;
};_egade =append (_egade ,_cgfcb );};return _egade ;};func (_geaa *textWord )computeText ()string {_cfgb :=make ([]string ,len (_geaa ._ddfa ));for _dggcg ,_aced :=range _geaa ._ddfa {_cfgb [_dggcg ]=_aced ._acbe ;};return _fg .Join (_cfgb ,"");};func (_aabeb rectRuling )checkWidth (_ceab ,_afaf float64 )(float64 ,bool ){_beaf :=_afaf -_ceab ;
_gcga :=_beaf <=_dgfe ;return _beaf ,_gcga ;};func (_bcf *textPara )text ()string {_gdfg :=new (_ca .Buffer );_bcf .writeText (_gdfg );return _gdfg .String ();};type rulingKind int ;func _agff (_gcab []rulingList )(rulingList ,rulingList ){var _gbdad rulingList ;
for _ ,_fadd :=range _gcab {_gbdad =append (_gbdad ,_fadd ...);};return _gbdad .vertsHorzs ();};func (_dgbe *textPara )depth ()float64 {if _dgbe ._efgd {return -1.0;};if len (_dgbe ._abdg )> 0{return _dgbe ._abdg [0]._bgb ;};return _dgbe ._gddb .depth ();
};func (_adae *textTable )emptyCompositeRow (_bcge int )bool {for _fagf :=0;_fagf < _adae ._eebbe ;_fagf ++{if _ccage ,_ebda :=_adae ._gag [_fgef (_fagf ,_bcge )];_ebda {if len (_ccage .paraList )> 0{return false ;};};};return true ;};func (_edf *textObject )getStrokeColor ()_b .Color {return _bgfadf (_edf ._ade .ColorspaceStroking ,_edf ._ade .ColorStroking );
};func (_dafd gridTile )complete ()bool {return _dafd .numBorders ()==4};func (_ddbee rulingList )vertsHorzs ()(rulingList ,rulingList ){var _cece ,_agcg rulingList ;for _ ,_adcde :=range _ddbee {switch _adcde ._gcaeg {case _aba :_cece =append (_cece ,_adcde );
case _ced :_agcg =append (_agcg ,_adcde );};};return _cece ,_agcg ;};func (_fdbf *textMark )inDiacriticArea (_fdcg *textMark )bool {_ddaf :=_fdbf .Llx -_fdcg .Llx ;_dcde :=_fdbf .Urx -_fdcg .Urx ;_ecg :=_fdbf .Lly -_fdcg .Lly ;return _fd .Abs (_ddaf +_dcde )< _fdbf .Width ()*_fdeb &&_fd .Abs (_ecg )< _fdbf .Height ()*_fdeb ;
};
// Append appends `mark` to the mark array.
func (_gecf *TextMarkArray )Append (mark TextMark ){_gecf ._bdf =append (_gecf ._bdf ,mark )};func (_gfba paraList )log (_fdgc string ){if !_fbgd {return ;};_bg .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",_fdgc ,len (_gfba ));
for _addcd ,_caeb :=range _gfba {if _caeb ==nil {continue ;};_badbg :=_caeb .text ();_fgab :="\u0020\u0020";if _caeb ._gddb !=nil {_fgab =_gb .Sprintf ("\u005b%\u0064\u0078\u0025\u0064\u005d",_caeb ._gddb ._eebbe ,_caeb ._gddb ._deee );};_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0025s\u0020\u0025\u0071\u000a",_addcd ,_caeb .PdfRectangle ,_fgab ,_eedbc (_badbg ,50));
};};type bounded interface{bbox ()_ba .PdfRectangle };func (_bgbga rulingList )log (_gafc string ){if !_egg {return ;};_bg .Log .Info ("\u0023\u0023\u0023\u0020\u0025\u0031\u0030\u0073\u003a\u0020\u0076\u0065c\u0073\u003d\u0025\u0073",_gafc ,_bgbga .String ());
for _dbaa ,_ebedc :=range _bgbga {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dbaa ,_ebedc .String ());};};
// 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 (_gad *Extractor )ExtractTextWithStats ()(_bc string ,_gfe int ,_begd int ,_acf error ){_fcebd ,_gfe ,_begd ,_acf :=_gad .ExtractPageText ();if _acf !=nil {return "",_gfe ,_begd ,_acf ;};return _fcebd .Text (),_gfe ,_begd ,nil ;};func _dbea (_fcae ,_cagad bounded )float64 {return _fcae .bbox ().Llx -_cagad .bbox ().Llx };
func (_efbdg *textTable )subdivide ()*textTable {_efbdg .logComposite ("\u0073u\u0062\u0064\u0069\u0076\u0069\u0064e");_gdcc :=_efbdg .compositeRowCorridors ();_gaad :=_efbdg .compositeColCorridors ();if _bega {_bg .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",_ccgdd (_gdcc ),_ccgdd (_gaad ));
};if len (_gdcc )==0||len (_gaad )==0{return _efbdg ;};_bfca (_gdcc );_bfca (_gaad );if _bega {_bg .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",_ccgdd (_gdcc ),_ccgdd (_gaad ));
};_fbde ,_gaadc :=_fbcga (_efbdg ._deee ,_gdcc );_fdec ,_efdg :=_fbcga (_efbdg ._eebbe ,_gaad );_bfec :=make (map[uint64 ]*textPara ,_efdg *_gaadc );_dcdef :=&textTable {PdfRectangle :_efbdg .PdfRectangle ,_dbaada :_efbdg ._dbaada ,_deee :_gaadc ,_eebbe :_efdg ,_aagbe :_bfec };
if _bega {_bg .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",_efbdg ._eebbe ,_efbdg ._deee ,_efdg ,_gaadc ,_ccgdd (_gdcc ),_ccgdd (_gaad ),_fbde ,_fdec );
};for _beced :=0;_beced < _efbdg ._deee ;_beced ++{_bccbf :=_fbde [_beced ];for _bfffc :=0;_bfffc < _efbdg ._eebbe ;_bfffc ++{_bafc :=_fdec [_bfffc ];if _bega {_gb .Printf ("\u0025\u0036\u0064\u002c %\u0032\u0064\u003a\u0020\u0078\u0030\u003d\u0025\u0064\u0020\u0079\u0030\u003d\u0025d\u000a",_bfffc ,_beced ,_bafc ,_bccbf );
};_eegc ,_dfdc :=_efbdg ._gag [_fgef (_bfffc ,_beced )];if !_dfdc {continue ;};_bbgf :=_eegc .split (_gdcc [_beced ],_gaad [_bfffc ]);for _dddgc :=0;_dddgc < _bbgf ._deee ;_dddgc ++{for _ecdcc :=0;_ecdcc < _bbgf ._eebbe ;_ecdcc ++{_dfda :=_bbgf .get (_ecdcc ,_dddgc );
_dcdef .put (_bafc +_ecdcc ,_bccbf +_dddgc ,_dfda );if _bega {_gb .Printf ("\u0025\u0038\u0064\u002c\u0020\u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_bafc +_ecdcc ,_bccbf +_dddgc ,_dfda );};};};};};return _dcdef ;};func (_eaaf *shapesState )devicePoint (_facb ,_bccb float64 )_de .Point {_gaeg :=_eaaf ._edee .Mult (_eaaf ._cca );
_facb ,_bccb =_gaeg .Transform (_facb ,_bccb );return _de .NewPoint (_facb ,_bccb );};func _gcegd (_eefb ,_deecb int )int {if _eefb > _deecb {return _eefb ;};return _deecb ;};func (_eecb paraList )applyTables (_dbbe []*textTable )paraList {var _dfga paraList ;
for _ ,_bbdgg :=range _dbbe {_dfga =append (_dfga ,_bbdgg .newTablePara ());};for _ ,_fdege :=range _eecb {if _fdege ._fcfa {continue ;};_dfga =append (_dfga ,_fdege );};return _dfga ;};
// Text returns the extracted page text.
func (_gcfg PageText )Text ()string {return _gcfg ._efcd };func _addf (_egbg _ba .PdfRectangle )*ruling {return &ruling {_gcaeg :_ced ,_feccd :_egbg .Ury ,_fdagf :_egbg .Llx ,_egag :_egbg .Urx };};func (_gfdc paraList )extractTables (_aacg []gridTiling )paraList {if _bega {_bg .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 (_gfdc ));
};if len (_gfdc )< _cbabb {return _gfdc ;};_ggcf :=_gfdc .findTables (_aacg );if _bega {_bg .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 (_ggcf ));
for _bbae ,_bbbe :=range _ggcf {_bbbe .log (_gb .Sprintf ("c\u006f\u006d\u0062\u0069\u006e\u0065\u0064\u0020\u0025\u0064",_bbae ));};};return _gfdc .applyTables (_ggcf );};func (_fdebb *ruling )alignsPrimary (_gedgg *ruling )bool {return _fdebb ._gcaeg ==_gedgg ._gcaeg &&_fd .Abs (_fdebb ._feccd -_gedgg ._feccd )< _dgfe *0.5;
};func _bdfbcd (_egfg []*textMark ,_dagf _ba .PdfRectangle )*textWord {_gaga :=_egfg [0].PdfRectangle ;_cedeg :=_egfg [0]._ebeg ;for _ ,_decc :=range _egfg [1:]{_gaga =_abe (_gaga ,_decc .PdfRectangle );if _decc ._ebeg > _cedeg {_cedeg =_decc ._ebeg ;};
};return &textWord {PdfRectangle :_gaga ,_ddfa :_egfg ,_cgcc :_dagf .Ury -_gaga .Lly ,_abac :_cedeg };};func (_cacb *shapesState )drawRectangle (_adef ,_eafg ,_abfg ,_bebg float64 ){if _bgcb {_bbeg :=_cacb .devicePoint (_adef ,_eafg );_egb :=_cacb .devicePoint (_adef +_abfg ,_eafg +_bebg );
_cceeb :=_ba .PdfRectangle {Llx :_bbeg .X ,Lly :_bbeg .Y ,Urx :_egb .X ,Ury :_egb .Y };_bg .Log .Info ("d\u0072a\u0077\u0052\u0065\u0063\u0074\u0061\u006e\u0067l\u0065\u003a\u0020\u00256.\u0032\u0066",_cceeb );};_cacb .newSubPath ();_cacb .moveTo (_adef ,_eafg );
_cacb .lineTo (_adef +_abfg ,_eafg );_cacb .lineTo (_adef +_abfg ,_eafg +_bebg );_cacb .lineTo (_adef ,_eafg +_bebg );_cacb .closePath ();};
// PageImages represents extracted images on a PDF page with spatial information:
// display position and size.
type PageImages struct{Images []ImageMark ;};func (_gcfc rulingList )comp (_cgfca ,_dbbg int )bool {_eadg ,_eegb :=_gcfc [_cgfca ],_gcfc [_dbbg ];_cgecg ,_cefg :=_eadg ._gcaeg ,_eegb ._gcaeg ;if _cgecg !=_cefg {return _cgecg > _cefg ;};if _cgecg ==_fdfb {return false ;
};_egef :=func (_eceb bool )bool {if _cgecg ==_ced {return _eceb ;};return !_eceb ;};_faada ,_aceg :=_eadg ._feccd ,_eegb ._feccd ;if _faada !=_aceg {return _egef (_faada > _aceg );};_faada ,_aceg =_eadg ._fdagf ,_eegb ._fdagf ;if _faada !=_aceg {return _egef (_faada < _aceg );
};return _egef (_eadg ._egag < _eegb ._egag );};func (_fdag paraList )tables ()[]TextTable {var _fed []TextTable ;if _bega {_bg .Log .Info ("\u0070\u0061\u0072\u0061\u0073\u002e\u0074\u0061\u0062\u006c\u0065\u0073\u003a");};for _ ,_caff :=range _fdag {_bafd :=_caff ._gddb ;
if _bafd !=nil &&_bafd .isExportable (){_fed =append (_fed ,_bafd .toTextTable ());};};return _fed ;};func (_gged lineRuling )asRuling ()(*ruling ,bool ){_bgfbf :=ruling {_gcaeg :_gged ._gddbb ,Color :_gged .Color ,_ddcg :_aeda };switch _gged ._gddbb {case _aba :_bgfbf ._feccd =_gged .xMean ();
_bgfbf ._fdagf =_fd .Min (_gged ._cbac .Y ,_gged ._aeaaf .Y );_bgfbf ._egag =_fd .Max (_gged ._cbac .Y ,_gged ._aeaaf .Y );case _ced :_bgfbf ._feccd =_gged .yMean ();_bgfbf ._fdagf =_fd .Min (_gged ._cbac .X ,_gged ._aeaaf .X );_bgfbf ._egag =_fd .Max (_gged ._cbac .X ,_gged ._aeaaf .X );
default:_bg .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_gged ._gddbb );return nil ,false ;};return &_bgfbf ,true ;};func _ecfb (_fbdc *wordBag ,_daaf int )*textLine {_bdba :=_fbdc .firstWord (_daaf );
_cdca :=textLine {PdfRectangle :_bdba .PdfRectangle ,_bcca :_bdba ._abac ,_bgb :_bdba ._cgcc };_cdca .pullWord (_fbdc ,_bdba ,_daaf );return &_cdca ;};func (_bffaf paraList )findTables (_fcgga []gridTiling )[]*textTable {_bffaf .addNeighbours ();_gf .Slice (_bffaf ,func (_beae ,_ccbc int )bool {return _bbce (_bffaf [_beae ],_bffaf [_ccbc ])< 0});
var _geeg []*textTable ;if _bdaf {_cfbdcf :=_bffaf .findGridTables (_fcgga );_geeg =append (_geeg ,_cfbdcf ...);};if _bbdce {_egdeb :=_bffaf .findTextTables ();_geeg =append (_geeg ,_egdeb ...);};return _geeg ;};func (_fddgg *wordBag )text ()string {_dfbb :=_fddgg .allWords ();
_bdde :=make ([]string ,len (_dfbb ));for _afcg ,_bdfc :=range _dfbb {_bdde [_afcg ]=_bdfc ._ecdfc ;};return _fg .Join (_bdde ,"\u0020");};
// String returns a description of `p`.
func (_cfage *textPara )String ()string {if _cfage ._efgd {return _gb .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u005b\u0045\u004d\u0050\u0054\u0059\u005d",_cfage .PdfRectangle );};_dcec :="";if _cfage ._gddb !=nil {_dcec =_gb .Sprintf ("\u005b\u0025\u0064\u0078\u0025\u0064\u005d\u0020",_cfage ._gddb ._eebbe ,_cfage ._gddb ._deee );
};return _gb .Sprintf ("\u0025\u0036\u002e\u0032f \u0025\u0073\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u0020\u0025\u0071",_cfage .PdfRectangle ,_dcec ,len (_cfage ._abdg ),_eedbc (_cfage .text (),50));};func (_bdaec lineRuling )xMean ()float64 {return 0.5*(_bdaec ._cbac .X +_bdaec ._aeaaf .X )};
func (_edc *textObject )reset (){_edc ._bedc =_de .IdentityMatrix ();_edc ._aac =_de .IdentityMatrix ();_edc ._gdf =nil ;};type textState struct{_ccba float64 ;_edbc float64 ;_ecfe float64 ;_aaf float64 ;_cabe float64 ;_bgc RenderMode ;_eae float64 ;_fea *_ba .PdfFont ;
_aeaf _ba .PdfRectangle ;_dfc int ;_cbd int ;};func _cfbad (_ecff *PageText )error {_cgaag :=_a .GetLicenseKey ();if _cgaag !=nil &&_cgaag .IsLicensed ()||_fdf {return nil ;};_gb .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");
_gb .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 _c .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 (_cgb *wordBag )minDepth ()float64 {return _cgb ._cfg -(_cgb .Ury -_cgb ._dgbc )};
func (_acdd *textObject )getFont (_fbbg string )(*_ba .PdfFont ,error ){if _acdd ._aed ._ac !=nil {_acdd ._aed ._ab ++;_aedc ,_fbdg :=_acdd ._aed ._ac [_fbbg ];if _fbdg {_aedc ._eda =_acdd ._aed ._ab ;return _aedc ._fefd ,nil ;};};_fdfg ,_dbgf :=_acdd .getFontDirect (_fbbg );
if _dbgf !=nil {return nil ,_dbgf ;};if _acdd ._aed ._ac !=nil {_fdb :=fontEntry {_fdfg ,_acdd ._aed ._ab };if len (_acdd ._aed ._ac )>=_gcedg {var _cdb []string ;for _fdde :=range _acdd ._aed ._ac {_cdb =append (_cdb ,_fdde );};_gf .Slice (_cdb ,func (_fffe ,_cdfc int )bool {return _acdd ._aed ._ac [_cdb [_fffe ]]._eda < _acdd ._aed ._ac [_cdb [_cdfc ]]._eda ;
});delete (_acdd ._aed ._ac ,_cdb [0]);};_acdd ._aed ._ac [_fbbg ]=_fdb ;};return _fdfg ,nil ;};func (_fgcgd *subpath )close (){if !_abag (_fgcgd ._cgf [0],_fgcgd .last ()){_fgcgd .add (_fgcgd ._cgf [0]);};_fgcgd ._dage =true ;_fgcgd .removeDuplicates ();
};func (_fada rulingList )isActualGrid ()(rulingList ,bool ){_afdca ,_cfgee :=_fada .augmentGrid ();if !(len (_afdca )>=_cgeb +1&&len (_cfgee )>=_bgge +1){if _egg {_bg .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 (_afdca ),len (_cfgee ),_cgeb +1,_bgge +1);
};return nil ,false ;};if _egg {_bg .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",_fada ,len (_afdca )>=2,len (_cfgee )>=2,len (_afdca )>=2&&len (_cfgee )>=2);
for _fadeg ,_bbec :=range _fada {_gb .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0076\u000a",_fadeg ,_bbec );};};if _ggg {_caeba ,_gecag :=_afdca [0],_afdca [len (_afdca )-1];_ffga ,_fegg :=_cfgee [0],_cfgee [len (_cfgee )-1];if !(_gabcf (_caeba ._feccd -_ffga ._fdagf )&&_gabcf (_gecag ._feccd -_ffga ._egag )&&_gabcf (_ffga ._feccd -_caeba ._egag )&&_gabcf (_fegg ._feccd -_caeba ._fdagf )){if _egg {_bg .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",_caeba ,_gecag ,_ffga ,_fegg );
};return nil ,false ;};}else {if !_afdca .aligned (){if _bbdcg {_bg .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 (_afdca ));
};return nil ,false ;};if !_cfgee .aligned (){if _egg {_bg .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 (_cfgee ));
};return nil ,false ;};};_dccg :=append (_afdca ,_cfgee ...);return _dccg ,true ;};func (_egebf paraList )lines ()[]*textLine {var _aefc []*textLine ;for _ ,_eege :=range _egebf {_aefc =append (_aefc ,_eege ._abdg ...);};return _aefc ;};func (_fe *imageExtractContext )extractInlineImage (_dadc *_fc .ContentStreamInlineImage ,_cdf _fc .GraphicsState ,_gd *_ba .PdfPageResources )error {_ceg ,_dea :=_dadc .ToImage (_gd );
if _dea !=nil {return _dea ;};_efc ,_dea :=_dadc .GetColorSpace (_gd );if _dea !=nil {return _dea ;};if _efc ==nil {_efc =_ba .NewPdfColorspaceDeviceGray ();};_ec ,_dea :=_efc .ImageToRGB (*_ceg );if _dea !=nil {return _dea ;};_gdc :=ImageMark {Image :&_ec ,Width :_cdf .CTM .ScalingFactorX (),Height :_cdf .CTM .ScalingFactorY (),Angle :_cdf .CTM .Angle ()};
_gdc .X ,_gdc .Y =_cdf .CTM .Translation ();_fe ._bac =append (_fe ._bac ,_gdc );_fe ._ffb ++;return nil ;};func (_cga *wordBag )highestWord (_efdb int ,_gcbb ,_cccg float64 )*textWord {for _ ,_debab :=range _cga ._ffde [_efdb ]{if _gcbb <=_debab ._cgcc &&_debab ._cgcc <=_cccg {return _debab ;
};};return nil ;};var _fdf =false ;func _fcfbc (_aedag string )bool {for _ ,_agcfb :=range _aedag {if !_e .IsSpace (_agcfb ){return false ;};};return true ;};type lineRuling struct{_gddbb rulingKind ;_ggge markKind ;_b .Color ;_cbac ,_aeaaf _de .Point ;
};func (_cdbff intSet )add (_afba int ){_cdbff [_afba ]=struct{}{}};func (_bgdc *textTable )putComposite (_bagac ,_ceegc int ,_fdaf paraList ,_cdad _ba .PdfRectangle ){if len (_fdaf )==0{_bg .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 ;};_bfaa :=compositeCell {PdfRectangle :_cdad ,paraList :_fdaf };if _bega {_gb .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",_bagac ,_ceegc ,_bfaa .String ());
};_bfaa .updateBBox ();_bgdc ._gag [_fgef (_bagac ,_ceegc )]=_bfaa ;};