2020-09-28 23:18:17 +00:00

12 lines
32 KiB
Go

//
// 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 classer ;import (_b "github.com/unidoc/unipdf/v3/common";_fc "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_fcd "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_dc "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_f "image";_fe "math";);func DefaultSettings ()Settings {_bce :=&Settings {};_bce .SetDefault ();return *_bce };func (_ad *Classer )classifyCorrelation (_efb *_fcd .Boxes ,_dbcd *_fcd .Bitmaps ,_dffc int )error {const _bgg ="\u0063\u006c\u0061\u0073si\u0066\u0079\u0043\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e";if _efb ==nil {return _dc .Error (_bgg ,"\u006e\u0065\u0077\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0020\u0062\u006f\u0075\u006e\u0064\u0069\u006e\u0067\u0020\u0062o\u0078\u0065\u0073\u0020\u006eo\u0074\u0020f\u006f\u0075\u006e\u0064");};if _dbcd ==nil {return _dc .Error (_bgg ,"\u006e\u0065wC\u006f\u006d\u0070o\u006e\u0065\u006e\u0074s b\u0069tm\u0061\u0070\u0020\u0061\u0072\u0072\u0061y \u006e\u006f\u0074\u0020\u0066\u006f\u0075n\u0064");};_gdd :=len (_dbcd .Values );if _gdd ==0{_b .Log .Debug ("\u0063l\u0061\u0073s\u0069\u0066\u0079C\u006f\u0072\u0072\u0065\u006c\u0061\u0074i\u006f\u006e\u0020\u002d\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0070\u0069\u0078\u0061s\u0020\u0069\u0073\u0020\u0065\u006d\u0070\u0074\u0079");return nil ;};var (_eb ,_ebf *_fcd .Bitmap ;_fdd error ;);_ace :=&_fcd .Bitmaps {Values :make ([]*_fcd .Bitmap ,_gdd )};for _ece ,_dgc :=range _dbcd .Values {_ebf ,_fdd =_dgc .AddBorderGeneral (JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,0);if _fdd !=nil {return _dc .Wrap (_fdd ,_bgg ,"");};_ace .Values [_ece ]=_ebf ;};_fcb :=_ad .FgTemplates ;_fdf :=_fcd .MakePixelSumTab8 ();_bb :=_fcd .MakePixelCentroidTab8 ();_dcea :=make ([]int ,_gdd );_dee :=make ([][]int ,_gdd );_afb :=_fcd .Points (make ([]_fcd .Point ,_gdd ));_cdg :=&_afb ;var (_gddc ,_fb int ;_dbcf ,_ffd ,_gfd int ;_ffe ,_fae int ;_cec byte ;);for _gfda ,_ddf :=range _ace .Values {_dee [_gfda ]=make ([]int ,_ddf .Height );_gddc =0;_fb =0;_ffd =(_ddf .Height -1)*_ddf .RowStride ;_dbcf =0;for _fae =_ddf .Height -1;_fae >=0;_fae ,_ffd =_fae -1,_ffd -_ddf .RowStride {_dee [_gfda ][_fae ]=_dbcf ;_gfd =0;for _ffe =0;_ffe < _ddf .RowStride ;_ffe ++{_cec =_ddf .Data [_ffd +_ffe ];_gfd +=_fdf [_cec ];_gddc +=_bb [_cec ]+_ffe *8*_fdf [_cec ];};_dbcf +=_gfd ;_fb +=_gfd *_fae ;};_dcea [_gfda ]=_dbcf ;if _dbcf > 0{(*_cdg )[_gfda ]=_fcd .Point {X :float32 (_gddc )/float32 (_dbcf ),Y :float32 (_fb )/float32 (_dbcf )};}else {(*_cdg )[_gfda ]=_fcd .Point {X :float32 (_ddf .Width )/float32 (2),Y :float32 (_ddf .Height )/float32 (2)};};};if _fdd =_ad .CentroidPoints .Add (_cdg );_fdd !=nil {return _dc .Wrap (_fdd ,_bgg ,"\u0063\u0065\u006et\u0072\u006f\u0069\u0064\u0020\u0061\u0064\u0064");};var (_beg ,_cfd ,_fef int ;_bfd float64 ;_fag ,_dcfg ,_aec ,_aac float32 ;_aad ,_dbg _fcd .Point ;_baa bool ;_ced *similarTemplatesFinder ;_fff int ;_ddg *_fcd .Bitmap ;_gcc *_f .Rectangle ;_adg *_fcd .Bitmaps ;);for _fff ,_ebf =range _ace .Values {_cfd =_dcea [_fff ];if _fag ,_dcfg ,_fdd =_cdg .GetGeometry (_fff );_fdd !=nil {return _dc .Wrap (_fdd ,_bgg ,"\u0070t\u0061\u0020\u002d\u0020\u0069");};_baa =false ;_gffe :=len (_ad .UndilatedTemplates .Values );_ced =_ebg (_ad ,_ebf );for _efbb :=_ced .Next ();_efbb > -1;{if _ddg ,_fdd =_ad .UndilatedTemplates .GetBitmap (_efbb );_fdd !=nil {return _dc .Wrap (_fdd ,_bgg ,"\u0075\u006e\u0069dl\u0061\u0074\u0065\u0064\u005b\u0069\u0063\u006c\u0061\u0073\u0073\u005d\u0020\u003d\u0020\u0062\u006d\u0032");};if _fef ,_fdd =_fcb .GetInt (_efbb );_fdd !=nil {_b .Log .Trace ("\u0046\u0047\u0020T\u0065\u006d\u0070\u006ca\u0074\u0065\u0020\u005b\u0069\u0063\u006ca\u0073\u0073\u005d\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_fdd );};if _aec ,_aac ,_fdd =_ad .CentroidPointsTemplates .GetGeometry (_efbb );_fdd !=nil {return _dc .Wrap (_fdd ,_bgg ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0050\u006f\u0069\u006e\u0074T\u0065\u006d\u0070\u006c\u0061\u0074e\u0073\u005b\u0069\u0063\u006c\u0061\u0073\u0073\u005d\u0020\u003d\u0020\u00782\u002c\u0079\u0032\u0020");};if _ad .Settings .WeightFactor > 0.0{if _beg ,_fdd =_ad .TemplateAreas .Get (_efbb );_fdd !=nil {_b .Log .Trace ("\u0054\u0065\u006dp\u006c\u0061\u0074\u0065A\u0072\u0065\u0061\u0073\u005b\u0069\u0063l\u0061\u0073\u0073\u005d\u0020\u003d\u0020\u0061\u0072\u0065\u0061\u0020\u0025\u0076",_fdd );};_bfd =_ad .Settings .Thresh +(1.0-_ad .Settings .Thresh )*_ad .Settings .WeightFactor *float64 (_fef )/float64 (_beg );}else {_bfd =_ad .Settings .Thresh ;};_aadb ,_dgga :=_fcd .CorrelationScoreThresholded (_ebf ,_ddg ,_cfd ,_fef ,_aad .X -_dbg .X ,_aad .Y -_dbg .Y ,MaxDiffWidth ,MaxDiffHeight ,_fdf ,_dee [_fff ],float32 (_bfd ));if _dgga !=nil {return _dc .Wrap (_dgga ,_bgg ,"");};if _aeb {var (_fbb ,_gfg float64 ;_ffb ,_ffba int ;);_fbb ,_dgga =_fcd .CorrelationScore (_ebf ,_ddg ,_cfd ,_fef ,_fag -_aec ,_dcfg -_aac ,MaxDiffWidth ,MaxDiffHeight ,_fdf );if _dgga !=nil {return _dc .Wrap (_dgga ,_bgg ,"d\u0065\u0062\u0075\u0067Co\u0072r\u0065\u006c\u0061\u0074\u0069o\u006e\u0053\u0063\u006f\u0072\u0065");};_gfg ,_dgga =_fcd .CorrelationScoreSimple (_ebf ,_ddg ,_cfd ,_fef ,_fag -_aec ,_dcfg -_aac ,MaxDiffWidth ,MaxDiffHeight ,_fdf );if _dgga !=nil {return _dc .Wrap (_dgga ,_bgg ,"d\u0065\u0062\u0075\u0067Co\u0072r\u0065\u006c\u0061\u0074\u0069o\u006e\u0053\u0063\u006f\u0072\u0065");};_ffb =int (_fe .Sqrt (_fbb *float64 (_cfd )*float64 (_fef )));_ffba =int (_fe .Sqrt (_gfg *float64 (_cfd )*float64 (_fef )));if (_fbb >=_bfd )!=(_gfg >=_bfd ){return _dc .Errorf (_bgg ,"\u0064\u0065\u0062\u0075\u0067\u0020\u0043\u006f\u0072r\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020\u0073\u0063\u006f\u0072\u0065\u0020\u006d\u0069\u0073\u006d\u0061\u0074\u0063\u0068\u0020-\u0020\u0025d\u0028\u00250\u002e\u0034\u0066\u002c\u0020\u0025\u0076\u0029\u0020\u0076\u0073\u0020\u0025d(\u0025\u0030\u002e\u0034\u0066\u002c\u0020\u0025\u0076)\u0020\u0025\u0030\u002e\u0034\u0066",_ffb ,_fbb ,_fbb >=float64 (_bfd ),_ffba ,_gfg ,_gfg >=float64 (_bfd ),_fbb -_gfg );};if _fbb >=_bfd !=_aadb {return _dc .Errorf (_bgg ,"\u0064\u0065\u0062\u0075\u0067\u0020\u0043o\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e \u0073\u0063\u006f\u0072\u0065 \u004d\u0069\u0073\u006d\u0061t\u0063\u0068 \u0062\u0065\u0074w\u0065\u0065\u006e\u0020\u0063\u006frr\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020/\u0020\u0074\u0068\u0072\u0065s\u0068\u006f\u006c\u0064\u002e\u0020\u0043\u006f\u006dpa\u0072\u0069\u0073\u006f\u006e:\u0020\u0025\u0030\u002e\u0034\u0066\u0028\u0025\u0030\u002e\u0034\u0066\u002c\u0020\u0025\u0064\u0029\u0020\u003e\u003d\u0020\u00250\u002e\u0034\u0066\u0028\u0025\u0030\u002e\u0034\u0066\u0029\u0020\u0076\u0073\u0020\u0025\u0076",_fbb ,_fbb *float64 (_cfd )*float64 (_fef ),_ffb ,_bfd ,float32 (_bfd )*float32 (_cfd )*float32 (_fef ),_aadb );};};if _aadb {_baa =true ;if _dgga =_ad .ClassIDs .Add (_efbb );_dgga !=nil {return _dc .Wrap (_dgga ,_bgg ,"\u006f\u0076\u0065\u0072\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064");};if _dgga =_ad .ComponentPageNumbers .Add (_dffc );_dgga !=nil {return _dc .Wrap (_dgga ,_bgg ,"\u006f\u0076\u0065\u0072\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064");};if _ad .Settings .KeepClassInstances {if _eb ,_dgga =_dbcd .GetBitmap (_fff );_dgga !=nil {return _dc .Wrap (_dgga ,_bgg ,"\u004b\u0065\u0065\u0070Cl\u0061\u0073\u0073\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065\u0073\u0020\u002d \u0069");};if _adg ,_dgga =_ad .ClassInstances .GetBitmaps (_efbb );_dgga !=nil {return _dc .Wrap (_dgga ,_bgg ,"K\u0065\u0065\u0070\u0043\u006c\u0061s\u0073\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065s\u0020\u002d\u0020i\u0043l\u0061\u0073\u0073");};_adg .AddBitmap (_eb );if _gcc ,_dgga =_efb .Get (_fff );_dgga !=nil {return _dc .Wrap (_dgga ,_bgg ,"\u004be\u0065p\u0043\u006c\u0061\u0073\u0073I\u006e\u0073t\u0061\u006e\u0063\u0065\u0073");};_adg .AddBox (_gcc );};break ;};};if !_baa {if _fdd =_ad .ClassIDs .Add (_gffe );_fdd !=nil {return _dc .Wrap (_fdd ,_bgg ,"\u0021\u0066\u006f\u0075\u006e\u0064");};if _fdd =_ad .ComponentPageNumbers .Add (_dffc );_fdd !=nil {return _dc .Wrap (_fdd ,_bgg ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_adg =&_fcd .Bitmaps {};if _eb ,_fdd =_dbcd .GetBitmap (_fff );_fdd !=nil {return _dc .Wrap (_fdd ,_bgg ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_adg .AddBitmap (_eb );_cfb ,_eff :=_eb .Width ,_eb .Height ;_dadg :=uint64 (_eff )*uint64 (_cfb );_ad .TemplatesSize .Add (_dadg ,_gffe );if _gcc ,_fdd =_efb .Get (_fff );_fdd !=nil {return _dc .Wrap (_fdd ,_bgg ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_adg .AddBox (_gcc );_ad .ClassInstances .AddBitmaps (_adg );_ad .CentroidPointsTemplates .AddPoint (_fag ,_dcfg );_ad .FgTemplates .AddInt (_cfd );_ad .UndilatedTemplates .AddBitmap (_eb );_beg =(_ebf .Width -2*JbAddedPixels )*(_ebf .Height -2*JbAddedPixels );if _fdd =_ad .TemplateAreas .Add (_beg );_fdd !=nil {return _dc .Wrap (_fdd ,_bgg ,"\u0021\u0066\u006f\u0075\u006e\u0064");};};};_ad .NumberOfClasses =len (_ad .UndilatedTemplates .Values );return nil ;};func (_ccb *Settings )SetDefault (){if _ccb .MaxCompWidth ==0{switch _ccb .Components {case _fcd .ComponentConn :_ccb .MaxCompWidth =MaxConnCompWidth ;case _fcd .ComponentCharacters :_ccb .MaxCompWidth =MaxCharCompWidth ;case _fcd .ComponentWords :_ccb .MaxCompWidth =MaxWordCompWidth ;};};if _ccb .MaxCompHeight ==0{_ccb .MaxCompHeight =MaxCompHeight ;};if _ccb .Thresh ==0.0{_ccb .Thresh =0.9;};if _ccb .WeightFactor ==0.0{_ccb .WeightFactor =0.75;};if _ccb .RankHaus ==0.0{_ccb .RankHaus =0.97;};if _ccb .SizeHaus ==0{_ccb .SizeHaus =2;};};type Method int ;type similarTemplatesFinder struct{Classer *Classer ;Width int ;Height int ;Index int ;CurrentNumbers []int ;N int ;};const JbAddedPixels =6;func _ebg (_eeg *Classer ,_cfc *_fcd .Bitmap )*similarTemplatesFinder {return &similarTemplatesFinder {Width :_cfc .Width ,Height :_cfc .Height ,Classer :_eeg };};const (MaxDiffWidth =2;MaxDiffHeight =2;);func (_db *Classer )AddPage (inputPage *_fcd .Bitmap ,pageNumber int ,method Method )(_c error ){const _be ="\u0043l\u0061s\u0073\u0065\u0072\u002e\u0041\u0064\u0064\u0050\u0061\u0067\u0065";_db .Widths [pageNumber ]=inputPage .Width ;_db .Heights [pageNumber ]=inputPage .Height ;if _c =_db .verifyMethod (method );_c !=nil {return _dc .Wrap (_c ,_be ,"");};_cf ,_cc ,_c :=inputPage .GetComponents (_db .Settings .Components ,_db .Settings .MaxCompWidth ,_db .Settings .MaxCompHeight );if _c !=nil {return _dc .Wrap (_c ,_be ,"");};_b .Log .Debug ("\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074s\u003a\u0020\u0025\u0076",_cf );if _c =_db .addPageComponents (inputPage ,_cc ,_cf ,pageNumber ,method );_c !=nil {return _dc .Wrap (_c ,_be ,"");};return nil ;};func (_bfeb *similarTemplatesFinder )Next ()int {var (_ffa ,_dga ,_gdbb ,_afe int ;_ebe bool ;_fad *_fcd .Bitmap ;_fcde error ;);for {if _bfeb .Index >=25{return -1;};_dga =_bfeb .Width +TwoByTwoWalk [2*_bfeb .Index ];_ffa =_bfeb .Height +TwoByTwoWalk [2*_bfeb .Index +1];if _ffa < 1||_dga < 1{_bfeb .Index ++;continue ;};if len (_bfeb .CurrentNumbers )==0{_bfeb .CurrentNumbers ,_ebe =_bfeb .Classer .TemplatesSize .GetSlice (uint64 (_dga )*uint64 (_ffa ));if !_ebe {_bfeb .Index ++;continue ;};_bfeb .N =0;};_gdbb =len (_bfeb .CurrentNumbers );for ;_bfeb .N < _gdbb ;_bfeb .N ++{_afe =_bfeb .CurrentNumbers [_bfeb .N ];_fad ,_fcde =_bfeb .Classer .DilatedTemplates .GetBitmap (_afe );if _fcde !=nil {_b .Log .Debug ("\u0046\u0069\u006e\u0064\u004e\u0065\u0078\u0074\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u003a\u0020\u0074\u0065\u006d\u0070\u006c\u0061t\u0065\u0020\u006e\u006f\u0074 \u0066\u006fu\u006e\u0064\u003a\u0020");return 0;};if _fad .Width -2*JbAddedPixels ==_dga &&_fad .Height -2*JbAddedPixels ==_ffa {return _afe ;};};_bfeb .Index ++;_bfeb .CurrentNumbers =nil ;};};var _aeb bool ;func _de (_ee *_fcd .Bitmap ,_ae ,_gf ,_dgg ,_dfb int ,_bdf *_fcd .Bitmap )(_gbb _f .Point ,_bfe error ){const _gfe ="\u0066i\u006e\u0061\u006c\u0041l\u0069\u0067\u006e\u006d\u0065n\u0074P\u006fs\u0069\u0074\u0069\u006f\u006e\u0069\u006eg";if _ee ==nil {return _gbb ,_dc .Error (_gfe ,"\u0073\u006f\u0075\u0072ce\u0020\u006e\u006f\u0074\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};if _bdf ==nil {return _gbb ,_dc .Error (_gfe ,"t\u0065\u006d\u0070\u006cat\u0065 \u006e\u006f\u0074\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064");};_fa ,_aee :=_bdf .Width ,_bdf .Height ;_dff ,_gff :=_ae -_dgg -JbAddedPixels ,_gf -_dfb -JbAddedPixels ;_b .Log .Trace ("\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0079\u003a\u0020\u0027\u0025\u0064'\u002c\u0020\u0077\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0068\u003a \u0027\u0025\u0064\u0027\u002c\u0020\u0062\u0078\u003a\u0020\u0027\u0025d'\u002c\u0020\u0062\u0079\u003a\u0020\u0027\u0025\u0064\u0027",_ae ,_gf ,_fa ,_aee ,_dff ,_gff );_gdf ,_bfe :=_fcd .Rect (_dff ,_gff ,_fa ,_aee );if _bfe !=nil {return _gbb ,_dc .Wrap (_bfe ,_gfe ,"");};_dea ,_ ,_bfe :=_ee .ClipRectangle (_gdf );if _bfe !=nil {_b .Log .Error ("\u0043a\u006e\u0027\u0074\u0020\u0063\u006c\u0069\u0070\u0020\u0072\u0065c\u0074\u0061\u006e\u0067\u006c\u0065\u003a\u0020\u0025\u0076",_gdf );return _gbb ,_dc .Wrap (_bfe ,_gfe ,"");};_bg :=_fcd .New (_dea .Width ,_dea .Height );_bgd :=_fe .MaxInt32 ;var _agag ,_dcg ,_ac ,_cgd ,_ba int ;for _agag =-1;_agag <=1;_agag ++{for _dcg =-1;_dcg <=1;_dcg ++{if _ ,_bfe =_fcd .Copy (_bg ,_dea );_bfe !=nil {return _gbb ,_dc .Wrap (_bfe ,_gfe ,"");};if _bfe =_bg .RasterOperation (_dcg ,_agag ,_fa ,_aee ,_fcd .PixSrcXorDst ,_bdf ,0,0);_bfe !=nil {return _gbb ,_dc .Wrap (_bfe ,_gfe ,"");};_ac =_bg .CountPixels ();if _ac < _bgd {_cgd =_dcg ;_ba =_agag ;_bgd =_ac ;};};};_gbb .X =_cgd ;_gbb .Y =_ba ;return _gbb ,nil ;};func (_ebb *Classer )classifyRankHouseNonOne (_bdb *_fcd .Boxes ,_dddd ,_dcdd ,_gbdf *_fcd .Bitmaps ,_fea *_fcd .Points ,_dcgb *_fc .NumSlice ,_gge int )(_feb error ){const _gca ="\u0043\u006c\u0061\u0073s\u0065\u0072\u002e\u0063\u006c\u0061\u0073\u0073\u0069\u0066y\u0052a\u006e\u006b\u0048\u006f\u0075\u0073\u0065O\u006e\u0065";var (_fefg ,_ggfd ,_aeaa ,_aegdc float32 ;_cgda ,_cedf ,_cgc int ;_gcb ,_agca ,_faa ,_bcb ,_ffdc *_fcd .Bitmap ;_dba ,_fbf bool ;);_beb :=_fcd .MakePixelSumTab8 ();for _gegg :=0;_gegg < len (_dddd .Values );_gegg ++{if _agca ,_feb =_dcdd .GetBitmap (_gegg );_feb !=nil {return _dc .Wrap (_feb ,_gca ,"b\u006d\u0073\u0031\u002e\u0047\u0065\u0074\u0028\u0069\u0029");};if _cgda ,_feb =_dcgb .GetInt (_gegg );_feb !=nil {_b .Log .Trace ("\u0047\u0065t\u0074\u0069\u006e\u0067 \u0046\u0047T\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073 \u0061\u0074\u003a\u0020\u0025\u0064\u0020\u0066\u0061\u0069\u006c\u0065d\u003a\u0020\u0025\u0076",_gegg ,_feb );};if _faa ,_feb =_gbdf .GetBitmap (_gegg );_feb !=nil {return _dc .Wrap (_feb ,_gca ,"b\u006d\u0073\u0032\u002e\u0047\u0065\u0074\u0028\u0069\u0029");};if _fefg ,_ggfd ,_feb =_fea .GetGeometry (_gegg );_feb !=nil {return _dc .Wrapf (_feb ,_gca ,"\u0070t\u0061[\u0069\u005d\u002e\u0047\u0065\u006f\u006d\u0065\u0074\u0072\u0079");};_afc :=len (_ebb .UndilatedTemplates .Values );_dba =false ;_aae :=_ebg (_ebb ,_agca );for _cgc =_aae .Next ();_cgc > -1;{if _bcb ,_feb =_ebb .UndilatedTemplates .GetBitmap (_cgc );_feb !=nil {return _dc .Wrap (_feb ,_gca ,"\u0070\u0069\u0078\u0061\u0074\u002e\u005b\u0069\u0043l\u0061\u0073\u0073\u005d");};if _cedf ,_feb =_ebb .FgTemplates .GetInt (_cgc );_feb !=nil {_b .Log .Trace ("\u0047\u0065\u0074\u0074\u0069\u006eg\u0020\u0046\u0047\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u005b\u0025d\u005d\u0020\u0066\u0061\u0069\u006c\u0065d\u003a\u0020\u0025\u0076",_cgc ,_feb );};if _ffdc ,_feb =_ebb .DilatedTemplates .GetBitmap (_cgc );_feb !=nil {return _dc .Wrap (_feb ,_gca ,"\u0070\u0069\u0078\u0061\u0074\u0064\u005b\u0069\u0043l\u0061\u0073\u0073\u005d");};if _aeaa ,_aegdc ,_feb =_ebb .CentroidPointsTemplates .GetGeometry (_cgc );_feb !=nil {return _dc .Wrap (_feb ,_gca ,"\u0043\u0065\u006et\u0072\u006f\u0069\u0064P\u006f\u0069\u006e\u0074\u0073\u0054\u0065m\u0070\u006c\u0061\u0074\u0065\u0073\u005b\u0069\u0043\u006c\u0061\u0073\u0073\u005d");};_fbf ,_feb =_fcd .RankHausTest (_agca ,_faa ,_bcb ,_ffdc ,_fefg -_aeaa ,_ggfd -_aegdc ,MaxDiffWidth ,MaxDiffHeight ,_cgda ,_cedf ,float32 (_ebb .Settings .RankHaus ),_beb );if _feb !=nil {return _dc .Wrap (_feb ,_gca ,"");};if _fbf {_dba =true ;if _feb =_ebb .ClassIDs .Add (_cgc );_feb !=nil {return _dc .Wrap (_feb ,_gca ,"");};if _feb =_ebb .ComponentPageNumbers .Add (_gge );_feb !=nil {return _dc .Wrap (_feb ,_gca ,"");};if _ebb .Settings .KeepClassInstances {_ecaf ,_fdfg :=_ebb .ClassInstances .GetBitmaps (_cgc );if _fdfg !=nil {return _dc .Wrap (_fdfg ,_gca ,"\u0063\u002e\u0050\u0069\u0078\u0061\u0061\u002e\u0047\u0065\u0074B\u0069\u0074\u006d\u0061\u0070\u0073\u0028\u0069\u0043\u006ca\u0073\u0073\u0029");};if _gcb ,_fdfg =_dddd .GetBitmap (_gegg );_fdfg !=nil {return _dc .Wrap (_fdfg ,_gca ,"\u0070i\u0078\u0061\u005b\u0069\u005d");};_ecaf .Values =append (_ecaf .Values ,_gcb );_dfd ,_fdfg :=_bdb .Get (_gegg );if _fdfg !=nil {return _dc .Wrap (_fdfg ,_gca ,"b\u006f\u0078\u0061\u002e\u0047\u0065\u0074\u0028\u0069\u0029");};_ecaf .Boxes =append (_ecaf .Boxes ,_dfd );};break ;};};if !_dba {if _feb =_ebb .ClassIDs .Add (_afc );_feb !=nil {return _dc .Wrap (_feb ,_gca ,"\u0021\u0066\u006f\u0075\u006e\u0064");};if _feb =_ebb .ComponentPageNumbers .Add (_gge );_feb !=nil {return _dc .Wrap (_feb ,_gca ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_ecb :=&_fcd .Bitmaps {};_gcb =_dddd .Values [_gegg ];_ecb .AddBitmap (_gcb );_aacf ,_dfc :=_gcb .Width ,_gcb .Height ;_ebb .TemplatesSize .Add (uint64 (_aacf )*uint64 (_dfc ),_afc );_dbd ,_dbab :=_bdb .Get (_gegg );if _dbab !=nil {return _dc .Wrap (_dbab ,_gca ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_ecb .AddBox (_dbd );_ebb .ClassInstances .AddBitmaps (_ecb );_ebb .CentroidPointsTemplates .AddPoint (_fefg ,_ggfd );_ebb .UndilatedTemplates .AddBitmap (_agca );_ebb .DilatedTemplates .AddBitmap (_faa );_ebb .FgTemplates .AddInt (_cgda );};};_ebb .NumberOfClasses =len (_ebb .UndilatedTemplates .Values );return nil ;};func (_bff *Classer )verifyMethod (_dad Method )error {if _dad !=RankHaus &&_dad !=Correlation {return _dc .Error ("\u0076\u0065\u0072i\u0066\u0079\u004d\u0065\u0074\u0068\u006f\u0064","\u0069\u006e\u0076\u0061li\u0064\u0020\u0063\u006c\u0061\u0073\u0073\u0065\u0072\u0020\u006d\u0065\u0074\u0068o\u0064");};return nil ;};func (_a *Classer )addPageComponents (_fd *_fcd .Bitmap ,_cd *_fcd .Boxes ,_ag *_fcd .Bitmaps ,_ggf int ,_df Method )error {const _aga ="\u0043l\u0061\u0073\u0073\u0065r\u002e\u0041\u0064\u0064\u0050a\u0067e\u0043o\u006d\u0070\u006f\u006e\u0065\u006e\u0074s";if _fd ==nil {return _dc .Error (_aga ,"\u006e\u0069\u006c\u0020\u0069\u006e\u0070\u0075\u0074 \u0070\u0061\u0067\u0065");};if _cd ==nil ||_ag ==nil ||len (*_cd )==0{_b .Log .Trace ("\u0041\u0064\u0064P\u0061\u0067\u0065\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u003a\u0020\u0025\u0073\u002e\u0020\u004e\u006f\u0020\u0063\u006f\u006d\u0070\u006f\u006e\u0065n\u0074\u0073\u0020\u0066\u006f\u0075\u006e\u0064",_fd );return nil ;};var _bf error ;switch _df {case RankHaus :_bf =_a .classifyRankHaus (_cd ,_ag ,_ggf );case Correlation :_bf =_a .classifyCorrelation (_cd ,_ag ,_ggf );default:_b .Log .Debug ("\u0055\u006ek\u006e\u006f\u0077\u006e\u0020\u0063\u006c\u0061\u0073\u0073\u0069\u0066\u0079\u0020\u006d\u0065\u0074\u0068\u006f\u0064\u003a\u0020'%\u0076\u0027",_df );return _dc .Error (_aga ,"\u0075\u006e\u006bno\u0077\u006e\u0020\u0063\u006c\u0061\u0073\u0073\u0069\u0066\u0079\u0020\u006d\u0065\u0074\u0068\u006f\u0064");};if _bf !=nil {return _dc .Wrap (_bf ,_aga ,"");};if _bf =_a .getULCorners (_fd ,_cd );_bf !=nil {return _dc .Wrap (_bf ,_aga ,"");};_bd :=len (*_cd );_a .BaseIndex +=_bd ;if _bf =_a .ComponentsNumber .Add (_bd );_bf !=nil {return _dc .Wrap (_bf ,_aga ,"");};return nil ;};func (_eg *Classer )getULCorners (_gc *_fcd .Bitmap ,_ec *_fcd .Boxes )error {const _af ="\u0067\u0065\u0074U\u004c\u0043\u006f\u0072\u006e\u0065\u0072\u0073";if _gc ==nil {return _dc .Error (_af ,"\u006e\u0069l\u0020\u0069\u006da\u0067\u0065\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ec ==nil {return _dc .Error (_af ,"\u006e\u0069\u006c\u0020\u0062\u006f\u0075\u006e\u0064\u0073");};if _eg .PtaUL ==nil {_eg .PtaUL =&_fcd .Points {};};_feg :=len (*_ec );var (_eca ,_dd ,_gb ,_gd int ;_egg ,_dcf ,_agad ,_ce float32 ;_dg error ;_gdb *_f .Rectangle ;_ef *_fcd .Bitmap ;_agc _f .Point ;);for _cdf :=0;_cdf < _feg ;_cdf ++{_eca =_eg .BaseIndex +_cdf ;if _egg ,_dcf ,_dg =_eg .CentroidPoints .GetGeometry (_eca );_dg !=nil {return _dc .Wrap (_dg ,_af ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0050o\u0069\u006e\u0074\u0073");};if _dd ,_dg =_eg .ClassIDs .Get (_eca );_dg !=nil {return _dc .Wrap (_dg ,_af ,"\u0043\u006c\u0061s\u0073\u0049\u0044\u0073\u002e\u0047\u0065\u0074");};if _agad ,_ce ,_dg =_eg .CentroidPointsTemplates .GetGeometry (_dd );_dg !=nil {return _dc .Wrap (_dg ,_af ,"\u0043\u0065\u006etr\u006f\u0069\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073");};_daf :=_agad -_egg ;_ddd :=_ce -_dcf ;if _daf >=0{_gb =int (_daf +0.5);}else {_gb =int (_daf -0.5);};if _ddd >=0{_gd =int (_ddd +0.5);}else {_gd =int (_ddd -0.5);};if _gdb ,_dg =_ec .Get (_cdf );_dg !=nil {return _dc .Wrap (_dg ,_af ,"");};_ega ,_aa :=_gdb .Min .X ,_gdb .Min .Y ;_ef ,_dg =_eg .UndilatedTemplates .GetBitmap (_dd );if _dg !=nil {return _dc .Wrap (_dg ,_af ,"\u0055\u006e\u0064\u0069\u006c\u0061\u0074\u0065\u0064\u0054e\u006d\u0070\u006c\u0061\u0074\u0065\u0073.\u0047\u0065\u0074\u0028\u0069\u0043\u006c\u0061\u0073\u0073\u0029");};_agc ,_dg =_de (_gc ,_ega ,_aa ,_gb ,_gd ,_ef );if _dg !=nil {return _dc .Wrap (_dg ,_af ,"");};_eg .PtaUL .AddPoint (float32 (_ega -_gb +_agc .X ),float32 (_aa -_gd +_agc .Y ));};return nil ;};type Settings struct{MaxCompWidth int ;MaxCompHeight int ;SizeHaus int ;RankHaus float64 ;Thresh float64 ;WeightFactor float64 ;KeepClassInstances bool ;Components _fcd .Component ;Method Method ;};func Init (settings Settings )(*Classer ,error ){const _da ="\u0063\u006c\u0061s\u0073\u0065\u0072\u002e\u0049\u006e\u0069\u0074";_g :=&Classer {Settings :settings ,Widths :map[int ]int {},Heights :map[int ]int {},TemplatesSize :_fc .IntsMap {},TemplateAreas :&_fc .IntSlice {},ComponentPageNumbers :&_fc .IntSlice {},ClassIDs :&_fc .IntSlice {},ComponentsNumber :&_fc .IntSlice {},CentroidPoints :&_fcd .Points {},CentroidPointsTemplates :&_fcd .Points {},UndilatedTemplates :&_fcd .Bitmaps {},DilatedTemplates :&_fcd .Bitmaps {},ClassInstances :&_fcd .BitmapsArray {},FgTemplates :&_fc .NumSlice {}};if _fcf :=_g .Settings .Validate ();_fcf !=nil {return nil ,_dc .Wrap (_fcf ,_da ,"");};return _g ,nil ;};func (_dbb *Classer )classifyRankHouseOne (_dgd *_fcd .Boxes ,_bbc ,_gbd ,_gccb *_fcd .Bitmaps ,_ab *_fcd .Points ,_faf int )(_ccd error ){const _ged ="\u0043\u006c\u0061\u0073s\u0065\u0072\u002e\u0063\u006c\u0061\u0073\u0073\u0069\u0066y\u0052a\u006e\u006b\u0048\u006f\u0075\u0073\u0065O\u006e\u0065";var (_bef ,_gbc ,_ddc ,_bfa float32 ;_cfe int ;_fab ,_ggb ,_gfgb ,_aecd ,_aegd *_fcd .Bitmap ;_ggd ,_bbed bool ;);for _fca :=0;_fca < len (_bbc .Values );_fca ++{_ggb =_gbd .Values [_fca ];_gfgb =_gccb .Values [_fca ];_bef ,_gbc ,_ccd =_ab .GetGeometry (_fca );if _ccd !=nil {return _dc .Wrapf (_ccd ,_ged ,"\u0066\u0069\u0072\u0073\u0074\u0020\u0067\u0065\u006fm\u0065\u0074\u0072\u0079");};_cac :=len (_dbb .UndilatedTemplates .Values );_ggd =false ;_agae :=_ebg (_dbb ,_ggb );for _cfe =_agae .Next ();_cfe > -1;{_aecd ,_ccd =_dbb .UndilatedTemplates .GetBitmap (_cfe );if _ccd !=nil {return _dc .Wrap (_ccd ,_ged ,"\u0062\u006d\u0033");};_aegd ,_ccd =_dbb .DilatedTemplates .GetBitmap (_cfe );if _ccd !=nil {return _dc .Wrap (_ccd ,_ged ,"\u0062\u006d\u0034");};_ddc ,_bfa ,_ccd =_dbb .CentroidPointsTemplates .GetGeometry (_cfe );if _ccd !=nil {return _dc .Wrap (_ccd ,_ged ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0054\u0065\u006d\u0070l\u0061\u0074\u0065\u0073");};_bbed ,_ccd =_fcd .HausTest (_ggb ,_gfgb ,_aecd ,_aegd ,_bef -_ddc ,_gbc -_bfa ,MaxDiffWidth ,MaxDiffHeight );if _ccd !=nil {return _dc .Wrap (_ccd ,_ged ,"");};if _bbed {_ggd =true ;if _ccd =_dbb .ClassIDs .Add (_cfe );_ccd !=nil {return _dc .Wrap (_ccd ,_ged ,"");};if _ccd =_dbb .ComponentPageNumbers .Add (_faf );_ccd !=nil {return _dc .Wrap (_ccd ,_ged ,"");};if _dbb .Settings .KeepClassInstances {_fge ,_ffc :=_dbb .ClassInstances .GetBitmaps (_cfe );if _ffc !=nil {return _dc .Wrap (_ffc ,_ged ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_fab ,_ffc =_bbc .GetBitmap (_fca );if _ffc !=nil {return _dc .Wrap (_ffc ,_ged ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_fge .AddBitmap (_fab );_fcc ,_ffc :=_dgd .Get (_fca );if _ffc !=nil {return _dc .Wrap (_ffc ,_ged ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_fge .AddBox (_fcc );};break ;};};if !_ggd {if _ccd =_dbb .ClassIDs .Add (_cac );_ccd !=nil {return _dc .Wrap (_ccd ,_ged ,"");};if _ccd =_dbb .ComponentPageNumbers .Add (_faf );_ccd !=nil {return _dc .Wrap (_ccd ,_ged ,"");};_eee :=&_fcd .Bitmaps {};_fab ,_ccd =_bbc .GetBitmap (_fca );if _ccd !=nil {return _dc .Wrap (_ccd ,_ged ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_eee .Values =append (_eee .Values ,_fab );_ea ,_ecef :=_fab .Width ,_fab .Height ;_dbb .TemplatesSize .Add (uint64 (_ecef )*uint64 (_ea ),_cac );_adbb ,_gdc :=_dgd .Get (_fca );if _gdc !=nil {return _dc .Wrap (_gdc ,_ged ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_eee .AddBox (_adbb );_dbb .ClassInstances .AddBitmaps (_eee );_dbb .CentroidPointsTemplates .AddPoint (_bef ,_gbc );_dbb .UndilatedTemplates .AddBitmap (_ggb );_dbb .DilatedTemplates .AddBitmap (_gfgb );};};return nil ;};const (MaxConnCompWidth =350;MaxCharCompWidth =350;MaxWordCompWidth =1000;MaxCompHeight =120;);func (_cb *Classer )classifyRankHaus (_bee *_fcd .Boxes ,_aeg *_fcd .Bitmaps ,_aab int )error {const _ecd ="\u0063\u006ca\u0073\u0073\u0069f\u0079\u0052\u0061\u006e\u006b\u0048\u0061\u0075\u0073";if _bee ==nil {return _dc .Error (_ecd ,"\u0062\u006fx\u0061\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _aeg ==nil {return _dc .Error (_ecd ,"\u0070\u0069x\u0061\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_cecg :=len (_aeg .Values );if _cecg ==0{return _dc .Error (_ecd ,"e\u006dp\u0074\u0079\u0020\u006e\u0065\u0077\u0020\u0063o\u006d\u0070\u006f\u006een\u0074\u0073");};_adb :=_aeg .CountPixels ();_aebd :=_cb .Settings .SizeHaus ;_ffg :=_fcd .SelCreateBrick (_aebd ,_aebd ,_aebd /2,_aebd /2,_fcd .SelHit );_geg :=&_fcd .Bitmaps {Values :make ([]*_fcd .Bitmap ,_cecg )};_ecaa :=&_fcd .Bitmaps {Values :make ([]*_fcd .Bitmap ,_cecg )};var (_aea ,_ca ,_cga *_fcd .Bitmap ;_bbf error ;);for _bbe :=0;_bbe < _cecg ;_bbe ++{_aea ,_bbf =_aeg .GetBitmap (_bbe );if _bbf !=nil {return _dc .Wrap (_bbf ,_ecd ,"");};_ca ,_bbf =_aea .AddBorderGeneral (JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,0);if _bbf !=nil {return _dc .Wrap (_bbf ,_ecd ,"");};_cga ,_bbf =_fcd .Dilate (nil ,_ca ,_ffg );if _bbf !=nil {return _dc .Wrap (_bbf ,_ecd ,"");};_geg .Values [_cecg ]=_ca ;_ecaa .Values [_cecg ]=_cga ;};_cfg ,_bbf :=_fcd .Centroids (_geg .Values );if _bbf !=nil {return _dc .Wrap (_bbf ,_ecd ,"");};if _bbf =_cfg .Add (_cb .CentroidPoints );_bbf !=nil {_b .Log .Trace ("\u004e\u006f\u0020\u0063en\u0074\u0072\u006f\u0069\u0064\u0073\u0020\u0074\u006f\u0020\u0061\u0064\u0064");};if _cb .Settings .RankHaus ==1.0{_bbf =_cb .classifyRankHouseOne (_bee ,_aeg ,_geg ,_ecaa ,_cfg ,_aab );}else {_bbf =_cb .classifyRankHouseNonOne (_bee ,_aeg ,_geg ,_ecaa ,_cfg ,_adb ,_aab );};if _bbf !=nil {return _dc .Wrap (_bbf ,_ecd ,"");};return nil ;};type Classer struct{BaseIndex int ;Settings Settings ;ComponentsNumber *_fc .IntSlice ;TemplateAreas *_fc .IntSlice ;Widths map[int ]int ;Heights map[int ]int ;NumberOfClasses int ;ClassInstances *_fcd .BitmapsArray ;UndilatedTemplates *_fcd .Bitmaps ;DilatedTemplates *_fcd .Bitmaps ;TemplatesSize _fc .IntsMap ;FgTemplates *_fc .NumSlice ;CentroidPoints *_fcd .Points ;CentroidPointsTemplates *_fcd .Points ;ClassIDs *_fc .IntSlice ;ComponentPageNumbers *_fc .IntSlice ;PtaUL *_fcd .Points ;PtaLL *_fcd .Points ;};func (_bc *Classer )ComputeLLCorners ()(_ff error ){const _cg ="\u0043l\u0061\u0073\u0073\u0065\u0072\u002e\u0043\u006f\u006d\u0070\u0075t\u0065\u004c\u004c\u0043\u006f\u0072\u006e\u0065\u0072\u0073";if _bc .PtaUL ==nil {return _dc .Error (_cg ,"\u0055\u004c\u0020\u0043or\u006e\u0065\u0072\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};_dce :=len (*_bc .PtaUL );_bc .PtaLL =&_fcd .Points {};var (_gg ,_dcd float32 ;_e ,_dcda int ;_ge *_fcd .Bitmap ;);for _fg :=0;_fg < _dce ;_fg ++{_gg ,_dcd ,_ff =_bc .PtaUL .GetGeometry (_fg );if _ff !=nil {_b .Log .Debug ("\u0047e\u0074\u0074\u0069\u006e\u0067\u0020\u0050\u0074\u0061\u0055\u004c \u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_ff );return _dc .Wrap (_ff ,_cg ,"\u0050\u0074\u0061\u0055\u004c\u0020\u0047\u0065\u006fm\u0065\u0074\u0072\u0079");};_e ,_ff =_bc .ClassIDs .Get (_fg );if _ff !=nil {_b .Log .Debug ("\u0047\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0043\u006c\u0061s\u0073\u0049\u0044\u0020\u0066\u0061\u0069\u006c\u0065\u0064:\u0020\u0025\u0076",_ff );return _dc .Wrap (_ff ,_cg ,"\u0043l\u0061\u0073\u0073\u0049\u0044");};_ge ,_ff =_bc .UndilatedTemplates .GetBitmap (_e );if _ff !=nil {_b .Log .Debug ("\u0047\u0065t\u0074\u0069\u006e\u0067 \u0055\u006ed\u0069\u006c\u0061\u0074\u0065\u0064\u0054\u0065m\u0070\u006c\u0061\u0074\u0065\u0073\u0020\u0066\u0061\u0069\u006c\u0065d\u003a\u0020\u0025\u0076",_ff );return _dc .Wrap (_ff ,_cg ,"\u0055\u006e\u0064\u0069la\u0074\u0065\u0064\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073");};_dcda =_ge .Height ;_bc .PtaLL .AddPoint (_gg ,_dcd +float32 (_dcda ));};return nil ;};func (_dgb Settings )Validate ()error {const _baf ="\u0053\u0065\u0074\u0074\u0069\u006e\u0067\u0073\u002e\u0056\u0061\u006ci\u0064\u0061\u0074\u0065";if _dgb .Thresh < 0.4||_dgb .Thresh > 0.98{return _dc .Error (_baf ,"\u006a\u0062i\u0067\u0032\u0020\u0065\u006e\u0063\u006f\u0064\u0065\u0072\u0020\u0074\u0068\u0072\u0065\u0073\u0068\u0020\u006e\u006f\u0074\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u005b\u0030\u002e\u0034\u0020\u002d\u0020\u0030\u002e\u0039\u0038\u005d");};if _dgb .WeightFactor < 0.0||_dgb .WeightFactor > 1.0{return _dc .Error (_baf ,"\u006a\u0062i\u0067\u0032\u0020\u0065\u006ec\u006f\u0064\u0065\u0072\u0020w\u0065\u0069\u0067\u0068\u0074\u0020\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u006e\u006f\u0074\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u005b\u0030\u002e\u0030\u0020\u002d\u0020\u0031\u002e\u0030\u005d");};if _dgb .RankHaus < 0.5||_dgb .RankHaus > 1.0{return _dc .Error (_baf ,"\u006a\u0062\u0069\u0067\u0032\u0020\u0065\u006e\u0063\u006f\u0064\u0065\u0072\u0020\u0072a\u006e\u006b\u0020\u0068\u0061\u0075\u0073\u0020\u0076\u0061\u006c\u0075\u0065 \u006e\u006f\u0074\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065 [\u0030\u002e\u0035\u0020\u002d\u0020\u0031\u002e\u0030\u005d");};if _dgb .SizeHaus < 1||_dgb .SizeHaus > 10{return _dc .Error (_baf ,"\u006a\u0062\u0069\u0067\u0032 \u0065\u006e\u0063\u006f\u0064\u0065\u0072\u0020\u0073\u0069\u007a\u0065\u0020h\u0061\u0075\u0073\u0020\u0076\u0061\u006c\u0075\u0065\u0020\u006e\u006f\u0074\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u005b\u0031\u0020\u002d\u0020\u0031\u0030]");};switch _dgb .Components {case _fcd .ComponentConn ,_fcd .ComponentCharacters ,_fcd .ComponentWords :default:return _dc .Error (_baf ,"\u0069n\u0076\u0061\u006c\u0069d\u0020\u0063\u006c\u0061\u0073s\u0065r\u0020c\u006f\u006d\u0070\u006f\u006e\u0065\u006et");};return nil ;};const (RankHaus Method =iota ;Correlation ;);var TwoByTwoWalk =[]int {0,0,0,1,-1,0,0,-1,1,0,-1,1,1,1,-1,-1,1,-1,0,-2,2,0,0,2,-2,0,-1,-2,1,-2,2,-1,2,1,1,2,-1,2,-2,1,-2,-1,-2,-2,2,-2,2,2,-2,2};