Alip Sulistio 36d084b3c4
prepare release (#510)
Co-authored-by: UniDoc Build <build@unidoc.io>
2024-04-02 17:10:23 +00:00

70 lines
7.6 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 reference ;import (_a "errors";_ce "fmt";_cg "github.com/unidoc/unioffice/spreadsheet/update";_g "regexp";_b "strconv";_cc "strings";);
// ParseCellReference parses a cell reference of the form 'A10' and splits it
// into column/row segments.
func ParseCellReference (s string )(CellReference ,error ){s =_cc .TrimSpace (s );if len (s )< 2{return CellReference {},_a .New ("\u0063\u0065\u006c\u006c\u0020\u0072\u0065\u0066e\u0072\u0065\u006ece\u0020\u006d\u0075\u0073\u0074\u0020h\u0061\u0076\u0065\u0020\u0061\u0074\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0074\u0077o\u0020\u0063\u0068\u0061\u0072\u0061\u0063\u0074e\u0072\u0073");
};_acg :=CellReference {};_gd ,_gb ,_bg :=_gf (s );if _bg !=nil {return CellReference {},_bg ;};if _gd !=""{_acg .SheetName =_gd ;};if s [0]=='$'{_acg .AbsoluteColumn =true ;_gb =_gb [1:];};_e :=-1;_ga :for _f :=0;_f < len (_gb );_f ++{switch {case _gb [_f ]>='0'&&_gb [_f ]<='9'||_gb [_f ]=='$':_e =_f ;
break _ga ;};};switch _e {case 0:return CellReference {},_ce .Errorf ("\u006e\u006f\u0020\u006cet\u0074\u0065\u0072\u0020\u0070\u0072\u0065\u0066\u0069\u0078\u0020\u0069\u006e\u0020%\u0073",_gb );case -1:return CellReference {},_ce .Errorf ("\u006eo\u0020d\u0069\u0067\u0069\u0074\u0073\u0020\u0069\u006e\u0020\u0025\u0073",_gb );
};_acg .Column =_gb [0:_e ];if _gb [_e ]=='$'{_acg .AbsoluteRow =true ;_e ++;};_acg .ColumnIdx =ColumnToIndex (_acg .Column );_d ,_bg :=_b .ParseUint (_gb [_e :],10,32);if _bg !=nil {return CellReference {},_ce .Errorf ("e\u0072\u0072\u006f\u0072 p\u0061r\u0073\u0069\u006e\u0067\u0020r\u006f\u0077\u003a\u0020\u0025\u0073",_bg );
};if _d ==0{return CellReference {},_ce .Errorf ("\u0065\u0072\u0072\u006f\u0072\u0020\u0070\u0061\u0072\u0073i\u006e\u0067\u0020\u0072\u006f\u0077\u003a \u0063\u0061\u006e\u006e\u006f\u0074\u0020\u0062\u0065\u0020\u0030");};_acg .RowIdx =uint32 (_d );
return _acg ,nil ;};
// ParseColumnReference parses a column reference of the form 'Sheet1!A' and splits it
// into sheet name and column segments.
func ParseColumnReference (s string )(ColumnReference ,error ){s =_cc .TrimSpace (s );if len (s )< 1{return ColumnReference {},_a .New ("\u0063\u006f\u006c\u0075\u006d\u006e \u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065\u0020\u006d\u0075\u0073\u0074\u0020\u0068\u0061\u0076\u0065\u0020a\u0074\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u006f\u006e\u0065\u0020\u0063\u0068a\u0072a\u0063\u0074\u0065\u0072");
};_bf :=ColumnReference {};_ff ,_ae ,_ec :=_gf (s );if _ec !=nil {return ColumnReference {},_ec ;};if _ff !=""{_bf .SheetName =_ff ;};if _ae [0]=='$'{_bf .AbsoluteColumn =true ;_ae =_ae [1:];};if !_gg .MatchString (_ae ){return ColumnReference {},_a .New ("\u0063\u006f\u006c\u0075\u006dn\u0020\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065\u0020\u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u0062\u0065\u0074\u0077\u0065\u0065\u006e\u0020\u0041\u0020\u0061\u006e\u0064\u0020\u005a\u005a");
};_bf .Column =_ae ;_bf .ColumnIdx =ColumnToIndex (_bf .Column );return _bf ,nil ;};
// ParseRangeReference splits a range reference of the form "A1:B5" into its
// components.
func ParseRangeReference (s string )(_af ,_ad CellReference ,_fac error ){_cgg ,_dc ,_fac :=_gf (s );if _fac !=nil {return CellReference {},CellReference {},_fac ;};_ada :=_cc .Split (_dc ,"\u003a");if len (_ada )!=2{return CellReference {},CellReference {},_a .New ("i\u006ev\u0061\u006c\u0069\u0064\u0020\u0072\u0061\u006eg\u0065\u0020\u0066\u006frm\u0061\u0074");
};if _cgg !=""{_ada [0]=_cgg +"\u0021"+_ada [0];_ada [1]=_cgg +"\u0021"+_ada [1];};_aec ,_fac :=ParseCellReference (_ada [0]);if _fac !=nil {return CellReference {},CellReference {},_fac ;};_gc ,_fac :=ParseCellReference (_ada [1]);if _fac !=nil {return CellReference {},CellReference {},_fac ;
};return _aec ,_gc ,nil ;};
// CellReference is a parsed reference to a cell. Input is of the form 'A1',
// '$C$2', etc.
type CellReference struct{RowIdx uint32 ;ColumnIdx uint32 ;Column string ;AbsoluteColumn bool ;AbsoluteRow bool ;SheetName string ;};func _gf (_cd string )(string ,string ,error ){_cac :="";_fe :=_cc .LastIndex (_cd ,"\u0021");if _fe > -1{_cac =_cd [:_fe ];
_cd =_cd [_fe +1:];if _cac ==""{return "","",_a .New ("\u0049n\u0076a\u006c\u0069\u0064\u0020\u0073h\u0065\u0065t\u0020\u006e\u0061\u006d\u0065");};};return _cac ,_cd ,nil ;};
// Update updates reference to point one of the neighboring columns with respect to the update type after removing a row/column.
func (_abc *ColumnReference )Update (updateType _cg .UpdateAction )*ColumnReference {switch updateType {case _cg .UpdateActionRemoveColumn :_fb :=_abc ;_fb .ColumnIdx =_abc .ColumnIdx -1;_fb .Column =IndexToColumn (_fb .ColumnIdx );return _fb ;default:return _abc ;
};};
// ColumnReference is a parsed reference to a column. Input is of the form 'A',
// '$C', etc.
type ColumnReference struct{ColumnIdx uint32 ;Column string ;AbsoluteColumn bool ;SheetName string ;};
// String returns a string representation of CellReference.
func (_ab CellReference )String ()string {_ac :=make ([]byte ,0,4);if _ab .AbsoluteColumn {_ac =append (_ac ,'$');};_ac =append (_ac ,_ab .Column ...);if _ab .AbsoluteRow {_ac =append (_ac ,'$');};_ac =_b .AppendInt (_ac ,int64 (_ab .RowIdx ),10);return string (_ac );
};
// String returns a string representation of ColumnReference.
func (_fa ColumnReference )String ()string {_dd :=make ([]byte ,0,4);if _fa .AbsoluteColumn {_dd =append (_dd ,'$');};_dd =append (_dd ,_fa .Column ...);return string (_dd );};
// IndexToColumn maps a column number to a column name (e.g. 0 = A, 1 = B, 26 = AA)
func IndexToColumn (col uint32 )string {var _be [64+1]byte ;_ca :=len (_be );_cb :=col ;const _eb =26;for _cb >=_eb {_ca --;_df :=_cb /_eb ;_be [_ca ]=byte ('A'+uint (_cb -_df *_eb ));_cb =_df -1;};_ca --;_be [_ca ]=byte ('A'+uint (_cb ));return string (_be [_ca :]);
};var _gg =_g .MustCompile ("^\u005b\u0061\u002d\u007aA-\u005a]\u0028\u005b\u0061\u002d\u007aA\u002d\u005a\u005d\u003f\u0029\u0024");
// ColumnToIndex maps a column to a zero based index (e.g. A = 0, B = 1, AA = 26)
func ColumnToIndex (col string )uint32 {col =_cc .ToUpper (col );_ef :=uint32 (0);for _ ,_abb :=range col {_ef *=26;_ef +=uint32 (_abb -'A'+1);};return _ef -1;};
// ParseColumnRangeReference splits a range reference of the form "A:B" into its
// components.
func ParseColumnRangeReference (s string )(_bd ,_gca ColumnReference ,_adf error ){_efb :="";_cdf :=_cc .Split (s ,"\u0021");if len (_cdf )==2{_efb =_cdf [0];s =_cdf [1];};_ea :=_cc .Split (s ,"\u003a");if len (_ea )!=2{return ColumnReference {},ColumnReference {},_a .New ("i\u006ev\u0061\u006c\u0069\u0064\u0020\u0072\u0061\u006eg\u0065\u0020\u0066\u006frm\u0061\u0074");
};if _efb !=""{_ea [0]=_efb +"\u0021"+_ea [0];_ea [1]=_efb +"\u0021"+_ea [1];};_caf ,_adf :=ParseColumnReference (_ea [0]);if _adf !=nil {return ColumnReference {},ColumnReference {},_adf ;};_dg ,_adf :=ParseColumnReference (_ea [1]);if _adf !=nil {return ColumnReference {},ColumnReference {},_adf ;
};return _caf ,_dg ,nil ;};
// Update updates reference to point one of the neighboring cells with respect to the update type after removing a row/column.
func (_cee *CellReference )Update (updateType _cg .UpdateAction )*CellReference {switch updateType {case _cg .UpdateActionRemoveColumn :_eg :=_cee ;_eg .ColumnIdx =_cee .ColumnIdx -1;_eg .Column =IndexToColumn (_eg .ColumnIdx );return _eg ;default:return _cee ;
};};