Skip to content

Commit

Permalink
Merge pull request #512 from unidoc-build/prep-rc-v1.32.0
Browse files Browse the repository at this point in the history
  • Loading branch information
gunnsth authored May 4, 2024
2 parents 36d084b + a325a42 commit aa143a5
Show file tree
Hide file tree
Showing 60 changed files with 57,478 additions and 57,521 deletions.
9 changes: 4 additions & 5 deletions algo/algo.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,9 @@
// 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 algo ;import _e "strconv";func RepeatString (s string ,cnt int )string {if cnt <=0{return "";};_ae :=make ([]byte ,len (s )*cnt );_ce :=[]byte (s );for _ga :=0;_ga < cnt ;_ga ++{copy (_ae [_ga :],_ce );};return string (_ae );};func _a (_f byte )bool {return _f >='0'&&_f <='9'};

package algo ;import _g "strconv";func RepeatString (s string ,cnt int )string {if cnt <=0{return "";};_fc :=make ([]byte ,len (s )*cnt );_de :=[]byte (s );for _deb :=0;_deb < cnt ;_deb ++{copy (_fc [_deb :],_de );};return string (_fc );};

// NaturalLess compares two strings in a human manner so rId2 sorts less than rId10
func NaturalLess (lhs ,rhs string )bool {_g ,_fe :=0,0;for _g < len (lhs )&&_fe < len (rhs ){_c :=lhs [_g ];_feg :=rhs [_fe ];_gb :=_a (_c );_d :=_a (_feg );switch {case _gb &&!_d :return true ;case !_gb &&_d :return false ;case !_gb &&!_d :if _c !=_feg {return _c < _feg ;
};_g ++;_fe ++;default:_dg :=_g +1;_fd :=_fe +1;for _dg < len (lhs )&&_a (lhs [_dg ]){_dg ++;};for _fd < len (rhs )&&_a (rhs [_fd ]){_fd ++;};_fa ,_ :=_e .ParseUint (lhs [_g :_dg ],10,64);_ef ,_ :=_e .ParseUint (rhs [_g :_fd ],10,64);if _fa !=_ef {return _fa < _ef ;
};_g =_dg ;_fe =_fd ;};};return len (lhs )< len (rhs );};
func NaturalLess (lhs ,rhs string )bool {_c ,_a :=0,0;for _c < len (lhs )&&_a < len (rhs ){_dg :=lhs [_c ];_cf :=rhs [_a ];_f :=_d (_dg );_ab :=_d (_cf );switch {case _f &&!_ab :return true ;case !_f &&_ab :return false ;case !_f &&!_ab :if _dg !=_cf {return _dg < _cf ;
};_c ++;_a ++;default:_gd :=_c +1;_cg :=_a +1;for _gd < len (lhs )&&_d (lhs [_gd ]){_gd ++;};for _cg < len (rhs )&&_d (rhs [_cg ]){_cg ++;};_bb ,_ :=_g .ParseUint (lhs [_c :_gd ],10,64);_bf ,_ :=_g .ParseUint (rhs [_c :_cg ],10,64);if _bb !=_bf {return _bb < _bf ;
};_c =_gd ;_a =_cg ;};};return len (lhs )< len (rhs );};func _d (_db byte )bool {return _db >='0'&&_db <='9'};
872 changes: 437 additions & 435 deletions chart/chart.go

Large diffs are not rendered by default.

75 changes: 38 additions & 37 deletions color/color.go

Large diffs are not rendered by default.

717 changes: 361 additions & 356 deletions common/axcontrol/axcontrol.go

Large diffs are not rendered by default.

708 changes: 356 additions & 352 deletions common/common.go

Large diffs are not rendered by default.

40 changes: 20 additions & 20 deletions common/license/license.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,39 +11,39 @@

// Package license helps manage commercial licenses and check if they
// are valid for the version of UniOffice used.
package license ;import _g "github.com/unidoc/unioffice/internal/license";
package license ;import _b "github.com/unidoc/unioffice/internal/license";

// SetLicenseKey sets and validates the license key.
func SetLicenseKey (content string ,customerName string )error {return _g .SetLicenseKey (content ,customerName );};

// SetLegacyLicenseKey installs a legacy license code. License codes issued prior to June 2019.
// Will be removed at some point in a future major version.
func SetLegacyLicenseKey (s string )error {return _g .SetLegacyLicenseKey (s )};
// LegacyLicenseType is the type of license
type LegacyLicenseType =_b .LegacyLicenseType ;

// GetMeteredState checks the currently used metered document usage status,
// documents used and credits available.
func GetMeteredState ()(_g .MeteredStatus ,error ){return _g .GetMeteredState ()};
func GetMeteredState ()(_b .MeteredStatus ,error ){return _b .GetMeteredState ()};

// LegacyLicenseType is the type of license
type LegacyLicenseType =_g .LegacyLicenseType ;

// LegacyLicense holds the old-style unioffice license information.
type LegacyLicense =_g .LegacyLicense ;
// GetLicenseKey returns the currently loaded license key.
func GetLicenseKey ()*LicenseKey {return _b .GetLicenseKey ()};

// SetMeteredKey sets the metered License API key required for SaaS operation.
// Document usage is reported periodically for the product to function correctly.
func SetMeteredKey (apiKey string )error {return _g .SetMeteredKey (apiKey )};
func SetMeteredKey (apiKey string )error {return _b .SetMeteredKey (apiKey )};

// GetLicenseKey returns the currently loaded license key.
func GetLicenseKey ()*LicenseKey {return _g .GetLicenseKey ()};
// MakeUnlicensedKey returns a default key.
func MakeUnlicensedKey ()*LicenseKey {return _b .MakeUnlicensedKey ()};

// SetLicenseKey sets and validates the license key.
func SetLicenseKey (content string ,customerName string )error {return _b .SetLicenseKey (content ,customerName );};

// LicenseKey represents a loaded license key.
type LicenseKey =_g .LicenseKey ;const (LicenseTierUnlicensed =_g .LicenseTierUnlicensed ;LicenseTierCommunity =_g .LicenseTierCommunity ;LicenseTierIndividual =_g .LicenseTierIndividual ;LicenseTierBusiness =_g .LicenseTierBusiness ;);
type LicenseKey =_b .LicenseKey ;const (LicenseTierUnlicensed =_b .LicenseTierUnlicensed ;LicenseTierCommunity =_b .LicenseTierCommunity ;LicenseTierIndividual =_b .LicenseTierIndividual ;LicenseTierBusiness =_b .LicenseTierBusiness ;);

// SetMeteredKeyPersistentCache sets the metered License API Key persistent cache.
// Default value `true`, set to `false` will report the usage immediately to license server,
// this can be used when there's no access to persistent data storage.
func SetMeteredKeyPersistentCache (val bool ){_g .SetMeteredKeyPersistentCache (val )};
func SetMeteredKeyPersistentCache (val bool ){_b .SetMeteredKeyPersistentCache (val )};

// MakeUnlicensedKey returns a default key.
func MakeUnlicensedKey ()*LicenseKey {return _g .MakeUnlicensedKey ()};
// LegacyLicense holds the old-style unioffice license information.
type LegacyLicense =_b .LegacyLicense ;

// SetLegacyLicenseKey installs a legacy license code. License codes issued prior to June 2019.
// Will be removed at some point in a future major version.
func SetLegacyLicenseKey (s string )error {return _b .SetLegacyLicenseKey (s )};
117 changes: 59 additions & 58 deletions common/logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,96 +9,97 @@
// 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 logger ;import (_e "fmt";_f "io";_ga "os";_ad "path/filepath";_a "runtime";);

// LogLevel is the verbosity level for logging.
type LogLevel int ;
package logger ;import (_g "fmt";_gb "io";_c "os";_d "path/filepath";_e "runtime";);

// Error logs error message.
func (_aa WriterLogger )Error (format string ,args ...interface{}){if _aa .LogLevel >=LogLevelError {_edg :="\u005b\u0045\u0052\u0052\u004f\u0052\u005d\u0020";_aa .logToWriter (_aa .Output ,_edg ,format ,args ...);};};
func (_gbb ConsoleLogger )Error (format string ,args ...interface{}){if _gbb .LogLevel >=LogLevelError {_dc :="\u005b\u0045\u0052\u0052\u004f\u0052\u005d\u0020";_gbb .output (_c .Stdout ,_dc ,format ,args ...);};};

// Error logs error message.
func (_dc ConsoleLogger )Error (format string ,args ...interface{}){if _dc .LogLevel >=LogLevelError {_fb :="\u005b\u0045\u0052\u0052\u004f\u0052\u005d\u0020";_dc .output (_ga .Stdout ,_fb ,format ,args ...);};};
// IsLogLevel returns true if log level is greater or equal than `level`.
// Can be used to avoid resource intensive calls to loggers.
func (_ff WriterLogger )IsLogLevel (level LogLevel )bool {return _ff .LogLevel >=level };

// NewConsoleLogger creates new console logger.
func NewConsoleLogger (logLevel LogLevel )*ConsoleLogger {return &ConsoleLogger {LogLevel :logLevel }};
// SetLogger sets 'logger' to be used by the unidoc unipdf library.
func SetLogger (logger Logger ){Log =logger };const (LogLevelTrace LogLevel =5;LogLevelDebug LogLevel =4;LogLevelInfo LogLevel =3;LogLevelNotice LogLevel =2;LogLevelWarning LogLevel =1;LogLevelError LogLevel =0;);

// Warning logs warning message.
func (_ed ConsoleLogger )Warning (format string ,args ...interface{}){if _ed .LogLevel >=LogLevelWarning {_ebc :="\u005b\u0057\u0041\u0052\u004e\u0049\u004e\u0047\u005d\u0020";_ed .output (_ga .Stdout ,_ebc ,format ,args ...);};};
// Trace logs trace message.
func (_ddg WriterLogger )Trace (format string ,args ...interface{}){if _ddg .LogLevel >=LogLevelTrace {_aeg :="\u005b\u0054\u0052\u0041\u0043\u0045\u005d\u0020";_ddg .logToWriter (_ddg .Output ,_aeg ,format ,args ...);};};

// Trace does nothing for dummy logger.
func (DummyLogger )Trace (format string ,args ...interface{}){};const (LogLevelTrace LogLevel =5;LogLevelDebug LogLevel =4;LogLevelInfo LogLevel =3;LogLevelNotice LogLevel =2;LogLevelWarning LogLevel =1;LogLevelError LogLevel =0;);
// IsLogLevel returns true from dummy logger.
func (DummyLogger )IsLogLevel (level LogLevel )bool {return true };

// ConsoleLogger is a logger that writes logs to the 'os.Stdout'
type ConsoleLogger struct{LogLevel LogLevel ;};func (_dd ConsoleLogger )output (_ed _gb .Writer ,_bd string ,_ad string ,_gc ...interface{}){_dda (_ed ,_bd ,_ad ,_gc ...);};

// IsLogLevel returns true if log level is greater or equal than `level`.
// Can be used to avoid resource intensive calls to loggers.
func (_cg WriterLogger )IsLogLevel (level LogLevel )bool {return _cg .LogLevel >=level };
func (_geb ConsoleLogger )IsLogLevel (level LogLevel )bool {return _geb .LogLevel >=level };

// IsLogLevel returns true from dummy logger.
func (DummyLogger )IsLogLevel (level LogLevel )bool {return true };
// Info does nothing for dummy logger.
func (DummyLogger )Info (format string ,args ...interface{}){};

// NewWriterLogger creates new 'writer' logger.
func NewWriterLogger (logLevel LogLevel ,writer _f .Writer )*WriterLogger {logger :=WriterLogger {Output :writer ,LogLevel :logLevel };return &logger ;};
// Notice does nothing for dummy logger.
func (DummyLogger )Notice (format string ,args ...interface{}){};

// Info logs info message.
func (_eg ConsoleLogger )Info (format string ,args ...interface{}){if _eg .LogLevel >=LogLevelInfo {_ba :="\u005bI\u004e\u0046\u004f\u005d\u0020";_eg .output (_ga .Stdout ,_ba ,format ,args ...);};};
// Debug logs debug message.
func (_ae ConsoleLogger )Debug (format string ,args ...interface{}){if _ae .LogLevel >=LogLevelDebug {_gaf :="\u005b\u0044\u0045\u0042\u0055\u0047\u005d\u0020";_ae .output (_c .Stdout ,_gaf ,format ,args ...);};};

// Logger is the interface used for logging in the unipdf package.
type Logger interface{Error (_ae string ,_d ...interface{});Warning (_b string ,_da ...interface{});Notice (_eb string ,_gd ...interface{});Info (_dd string ,_be ...interface{});Debug (_bc string ,_de ...interface{});Trace (_fc string ,_gb ...interface{});
IsLogLevel (_ge LogLevel )bool ;};
type Logger interface{Error (_db string ,_eb ...interface{});Warning (_a string ,_ga ...interface{});Notice (_gf string ,_b ...interface{});Info (_bc string ,_ee ...interface{});Debug (_ab string ,_ge ...interface{});Trace (_gfa string ,_cf ...interface{});
IsLogLevel (_ba LogLevel )bool ;};

// Trace logs trace message.
func (_db WriterLogger )Trace (format string ,args ...interface{}){if _db .LogLevel >=LogLevelTrace {_gg :="\u005b\u0054\u0052\u0041\u0043\u0045\u005d\u0020";_db .logToWriter (_db .Output ,_gg ,format ,args ...);};};
// Debug logs debug message.
func (_bb WriterLogger )Debug (format string ,args ...interface{}){if _bb .LogLevel >=LogLevelDebug {_bf :="\u005b\u0044\u0045\u0042\u0055\u0047\u005d\u0020";_bb .logToWriter (_bb .Output ,_bf ,format ,args ...);};};

// DummyLogger does nothing.
type DummyLogger struct{};
// Debug does nothing for dummy logger.
func (DummyLogger )Debug (format string ,args ...interface{}){};

// Info logs info message.
func (_gbf WriterLogger )Info (format string ,args ...interface{}){if _gbf .LogLevel >=LogLevelInfo {_ebb :="\u005bI\u004e\u0046\u004f\u005d\u0020";_gbf .logToWriter (_gbf .Output ,_ebb ,format ,args ...);};};
// Error logs error message.
func (_ca WriterLogger )Error (format string ,args ...interface{}){if _ca .LogLevel >=LogLevelError {_fcd :="\u005b\u0045\u0052\u0052\u004f\u0052\u005d\u0020";_ca .logToWriter (_ca .Output ,_fcd ,format ,args ...);};};

// Trace logs trace message.
func (_c ConsoleLogger )Trace (format string ,args ...interface{}){if _c .LogLevel >=LogLevelTrace {_gf :="\u005b\u0054\u0052\u0041\u0043\u0045\u005d\u0020";_c .output (_ga .Stdout ,_gf ,format ,args ...);};};

// Info does nothing for dummy logger.
func (DummyLogger )Info (format string ,args ...interface{}){};

// Debug logs debug message.
func (_af WriterLogger )Debug (format string ,args ...interface{}){if _af .LogLevel >=LogLevelDebug {_ef :="\u005b\u0044\u0045\u0042\u0055\u0047\u005d\u0020";_af .logToWriter (_af .Output ,_ef ,format ,args ...);};};
func (_dbg ConsoleLogger )Trace (format string ,args ...interface{}){if _dbg .LogLevel >=LogLevelTrace {_ac :="\u005b\u0054\u0052\u0041\u0043\u0045\u005d\u0020";_dbg .output (_c .Stdout ,_ac ,format ,args ...);};};func _dda (_cee _gb .Writer ,_dfe string ,_bdd string ,_bbb ...interface{}){_ ,_fe ,_ece ,_abg :=_e .Caller (3);
if !_abg {_fe ="\u003f\u003f\u003f";_ece =0;}else {_fe =_d .Base (_fe );};_gfd :=_g .Sprintf ("\u0025s\u0020\u0025\u0073\u003a\u0025\u0064 ",_dfe ,_fe ,_ece )+_bdd +"\u000a";_g .Fprintf (_cee ,_gfd ,_bbb ...);};

// Warning logs warning message.
func (_bg WriterLogger )Warning (format string ,args ...interface{}){if _bg .LogLevel >=LogLevelWarning {_aag :="\u005b\u0057\u0041\u0052\u004e\u0049\u004e\u0047\u005d\u0020";_bg .logToWriter (_bg .Output ,_aag ,format ,args ...);};};var Log Logger =DummyLogger {};
func (_bde WriterLogger )Warning (format string ,args ...interface{}){if _bde .LogLevel >=LogLevelWarning {_bg :="\u005b\u0057\u0041\u0052\u004e\u0049\u004e\u0047\u005d\u0020";_bde .logToWriter (_bde .Output ,_bg ,format ,args ...);};};var Log Logger =DummyLogger {};


// Debug does nothing for dummy logger.
func (DummyLogger )Debug (format string ,args ...interface{}){};func (_daa WriterLogger )logToWriter (_gfe _f .Writer ,_ca string ,_ac string ,_cd ...interface{}){_ddf (_gfe ,_ca ,_ac ,_cd );};

// ConsoleLogger is a logger that writes logs to the 'os.Stdout'
type ConsoleLogger struct{LogLevel LogLevel ;};func (_gbc ConsoleLogger )output (_bcf _f .Writer ,_aec string ,_dab string ,_ab ...interface{}){_ddf (_bcf ,_aec ,_dab ,_ab ...);};

// Notice logs notice message.
func (_bcd ConsoleLogger )Notice (format string ,args ...interface{}){if _bcd .LogLevel >=LogLevelNotice {_df :="\u005bN\u004f\u0054\u0049\u0043\u0045\u005d ";_bcd .output (_ga .Stdout ,_df ,format ,args ...);};};
// NewConsoleLogger creates new console logger.
func NewConsoleLogger (logLevel LogLevel )*ConsoleLogger {return &ConsoleLogger {LogLevel :logLevel }};

// Notice does nothing for dummy logger.
func (DummyLogger )Notice (format string ,args ...interface{}){};
// NewWriterLogger creates new 'writer' logger.
func NewWriterLogger (logLevel LogLevel ,writer _gb .Writer )*WriterLogger {logger :=WriterLogger {Output :writer ,LogLevel :logLevel };return &logger ;};

// Notice logs notice message.
func (_cf WriterLogger )Notice (format string ,args ...interface{}){if _cf .LogLevel >=LogLevelNotice {_ec :="\u005bN\u004f\u0054\u0049\u0043\u0045\u005d ";_cf .logToWriter (_cf .Output ,_ec ,format ,args ...);};};
// LogLevel is the verbosity level for logging.
type LogLevel int ;

// Warning does nothing for dummy logger.
func (DummyLogger )Warning (format string ,args ...interface{}){};

// WriterLogger is the logger that writes data to the Output writer
type WriterLogger struct{LogLevel LogLevel ;Output _f .Writer ;};
// Info logs info message.
func (_fb WriterLogger )Info (format string ,args ...interface{}){if _fb .LogLevel >=LogLevelInfo {_df :="\u005bI\u004e\u0046\u004f\u005d\u0020";_fb .logToWriter (_fb .Output ,_df ,format ,args ...);};};

// IsLogLevel returns true if log level is greater or equal than `level`.
// Can be used to avoid resource intensive calls to loggers.
func (_fe ConsoleLogger )IsLogLevel (level LogLevel )bool {return _fe .LogLevel >=level };
// Trace does nothing for dummy logger.
func (DummyLogger )Trace (format string ,args ...interface{}){};

// WriterLogger is the logger that writes data to the Output writer
type WriterLogger struct{LogLevel LogLevel ;Output _gb .Writer ;};

// Error does nothing for dummy logger.
func (DummyLogger )Error (format string ,args ...interface{}){};

// Debug logs debug message.
func (_ee ConsoleLogger )Debug (format string ,args ...interface{}){if _ee .LogLevel >=LogLevelDebug {_gea :="\u005b\u0044\u0045\u0042\u0055\u0047\u005d\u0020";_ee .output (_ga .Stdout ,_gea ,format ,args ...);};};func _ddf (_gbe _f .Writer ,_dg string ,_ag string ,_eed ...interface{}){_ ,_deg ,_fca ,_gc :=_a .Caller (3);
if !_gc {_deg ="\u003f\u003f\u003f";_fca =0;}else {_deg =_ad .Base (_deg );};_bcb :=_e .Sprintf ("\u0025s\u0020\u0025\u0073\u003a\u0025\u0064 ",_dg ,_deg ,_fca )+_ag +"\u000a";_e .Fprintf (_gbe ,_bcb ,_eed ...);};
// Notice logs notice message.
func (_fa WriterLogger )Notice (format string ,args ...interface{}){if _fa .LogLevel >=LogLevelNotice {_gca :="\u005bN\u004f\u0054\u0049\u0043\u0045\u005d ";_fa .logToWriter (_fa .Output ,_gca ,format ,args ...);};};

// SetLogger sets 'logger' to be used by the unidoc unipdf library.
func SetLogger (logger Logger ){Log =logger };
// Info logs info message.
func (_ec ConsoleLogger )Info (format string ,args ...interface{}){if _ec .LogLevel >=LogLevelInfo {_da :="\u005bI\u004e\u0046\u004f\u005d\u0020";_ec .output (_c .Stdout ,_da ,format ,args ...);};};

// Warning logs warning message.
func (_cd ConsoleLogger )Warning (format string ,args ...interface{}){if _cd .LogLevel >=LogLevelWarning {_fg :="\u005b\u0057\u0041\u0052\u004e\u0049\u004e\u0047\u005d\u0020";_cd .output (_c .Stdout ,_fg ,format ,args ...);};};

// DummyLogger does nothing.
type DummyLogger struct{};

// Notice logs notice message.
func (_be ConsoleLogger )Notice (format string ,args ...interface{}){if _be .LogLevel >=LogLevelNotice {_cc :="\u005bN\u004f\u0054\u0049\u0043\u0045\u005d ";_be .output (_c .Stdout ,_cc ,format ,args ...);};};func (_ce WriterLogger )logToWriter (_cg _gb .Writer ,_aa string ,_ag string ,_ddf ...interface{}){_dda (_cg ,_aa ,_ag ,_ddf );
};
24 changes: 12 additions & 12 deletions common/tempstorage/diskstore/diskstore.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,22 @@

// Package diskstore implements tempStorage interface
// by using disk as a storage
package diskstore ;import (_eg "github.com/unidoc/unioffice/common/tempstorage";_c "io/ioutil";_a "os";_e "strings";);
package diskstore ;import (_f "github.com/unidoc/unioffice/common/tempstorage";_g "io/ioutil";_ga "os";_b "strings";);

// Open opens file from disk according to a path
func (_cb diskStorage )Open (path string )(_eg .File ,error ){return _a .OpenFile (path ,_a .O_RDWR ,0644)};type diskStorage struct{};
// RemoveAll removes all files in the directory
func (_e diskStorage )RemoveAll (dir string )error {if _b .HasPrefix (dir ,_ga .TempDir ()){return _ga .RemoveAll (dir );};return nil ;};

// TempFile creates a new temp file by calling ioutil TempFile
func (_d diskStorage )TempFile (dir ,pattern string )(_eg .File ,error ){return _c .TempFile (dir ,pattern );};
// Open opens file from disk according to a path
func (_db diskStorage )Open (path string )(_f .File ,error ){return _ga .OpenFile (path ,_ga .O_RDWR ,0644);};type diskStorage struct{};

// SetAsStorage sets temp storage as a disk storage
func SetAsStorage (){_fd :=diskStorage {};_eg .SetAsStorage (&_fd )};

// RemoveAll removes all files in the directory
func (_fe diskStorage )RemoveAll (dir string )error {if _e .HasPrefix (dir ,_a .TempDir ()){return _a .RemoveAll (dir );};return nil ;};
func SetAsStorage (){_c :=diskStorage {};_f .SetAsStorage (&_c )};

// TempFile creates a new temp directory by calling ioutil TempDir
func (_fb diskStorage )TempDir (pattern string )(string ,error ){return _c .TempDir ("",pattern )};
// TempFile creates a new temp file by calling ioutil TempFile
func (_gd diskStorage )TempFile (dir ,pattern string )(_f .File ,error ){return _g .TempFile (dir ,pattern );};

// Add is not applicable in the diskstore implementation
func (_ed diskStorage )Add (path string )error {return nil };
func (_ac diskStorage )Add (path string )error {return nil };

// TempFile creates a new temp directory by calling ioutil TempDir
func (_a diskStorage )TempDir (pattern string )(string ,error ){return _g .TempDir ("",pattern )};
Loading

0 comments on commit aa143a5

Please sign in to comment.