Skip to content

Commit c12c4d2

Browse files
authored
Merge pull request #541 from unidoc-build/prep-rc-v2.3.0
Release v2.3.0
2 parents 3145cd4 + 6b13df3 commit c12c4d2

File tree

68 files changed

+64896
-64895
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+64896
-64895
lines changed

algo/algo.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
// Use of this source code is governed by the UniDoc End User License Agreement
1010
// terms that can be accessed at https://unidoc.io/eula/
1111

12-
package algo ;func RepeatString (s string ,cnt int )string {if cnt <=0{return "";};_d :=make ([]byte ,len (s )*cnt );_g :=[]byte (s );for _gc :=0;_gc < cnt ;_gc ++{copy (_d [_gc :],_g );};return string (_d );};
12+
package algo ;func RepeatString (s string ,cnt int )string {if cnt <=0{return "";};_c :=make ([]byte ,len (s )*cnt );_g :=[]byte (s );for _d :=0;_d < cnt ;_d ++{copy (_c [_d :],_g );};return string (_c );};

chart/chart.go

Lines changed: 447 additions & 439 deletions
Large diffs are not rendered by default.

color/color.go

Lines changed: 41 additions & 41 deletions
Large diffs are not rendered by default.

common/axcontrol/axcontrol.go

Lines changed: 351 additions & 354 deletions
Large diffs are not rendered by default.

common/common.go

Lines changed: 364 additions & 365 deletions
Large diffs are not rendered by default.

common/license/license.go

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,39 +11,40 @@
1111

1212
// Package license helps manage commercial licenses and check if they
1313
// are valid for the version of UniOffice used.
14-
package license ;import _a "github.com/unidoc/unioffice/v2/internal/license";
15-
16-
// LegacyLicense holds the old-style unioffice license information.
17-
type LegacyLicense =_a .LegacyLicense ;
14+
package license ;import _fc "github.com/unidoc/unioffice/v2/internal/license";
1815

1916
// MakeUnlicensedKey returns a default key.
20-
func MakeUnlicensedKey ()*LicenseKey {return _a .MakeUnlicensedKey ()};
17+
func MakeUnlicensedKey ()*LicenseKey {return _fc .MakeUnlicensedKey ()};const (LicenseTierUnlicensed =_fc .LicenseTierUnlicensed ;LicenseTierCommunity =_fc .LicenseTierCommunity ;LicenseTierIndividual =_fc .LicenseTierIndividual ;LicenseTierBusiness =_fc .LicenseTierBusiness ;
18+
);
2119

22-
// LegacyLicenseType is the type of license
23-
type LegacyLicenseType =_a .LegacyLicenseType ;const (LicenseTierUnlicensed =_a .LicenseTierUnlicensed ;LicenseTierCommunity =_a .LicenseTierCommunity ;LicenseTierIndividual =_a .LicenseTierIndividual ;LicenseTierBusiness =_a .LicenseTierBusiness ;);
20+
// LegacyLicense holds the old-style unioffice license information.
21+
type LegacyLicense =_fc .LegacyLicense ;
2422

25-
// GetLicenseKey returns the currently loaded license key.
26-
func GetLicenseKey ()*LicenseKey {return _a .GetLicenseKey ()};
23+
// LicenseKey represents a loaded license key.
24+
type LicenseKey =_fc .LicenseKey ;
2725

28-
// SetMeteredKeyUsageLogVerboseMode sets the metered License API Key usage log verbose mode.
29-
// Default value `false`, set to `true` will log the credit usages and print out to console with log level INFO.
30-
func SetMeteredKeyUsageLogVerboseMode (val bool ){_a .SetMeteredKeyUsageLogVerboseMode (val )};
26+
// SetLicenseKey sets and validates the license key.
27+
func SetLicenseKey (content string ,customerName string )error {return _fc .SetLicenseKey (content ,customerName );};
28+
29+
// LegacyLicenseType is the type of license
30+
type LegacyLicenseType =_fc .LegacyLicenseType ;
3131

3232
// SetMeteredKey sets the metered License API key required for SaaS operation.
3333
// Document usage is reported periodically for the product to function correctly.
34-
func SetMeteredKey (apiKey string )error {return _a .SetMeteredKey (apiKey )};
34+
func SetMeteredKey (apiKey string )error {return _fc .SetMeteredKey (apiKey )};
35+
36+
// GetMeteredState checks the currently used metered document usage status,
37+
// documents used and credits available.
38+
func GetMeteredState ()(_fc .MeteredStatus ,error ){return _fc .GetMeteredState ()};
3539

3640
// SetMeteredKeyPersistentCache sets the metered License API Key persistent cache.
3741
// Default value `true`, set to `false` will report the usage immediately to license server,
3842
// this can be used when there's no access to persistent data storage.
39-
func SetMeteredKeyPersistentCache (val bool ){_a .SetMeteredKeyPersistentCache (val )};
43+
func SetMeteredKeyPersistentCache (val bool ){_fc .SetMeteredKeyPersistentCache (val )};
4044

41-
// SetLicenseKey sets and validates the license key.
42-
func SetLicenseKey (content string ,customerName string )error {return _a .SetLicenseKey (content ,customerName );};
43-
44-
// LicenseKey represents a loaded license key.
45-
type LicenseKey =_a .LicenseKey ;
45+
// GetLicenseKey returns the currently loaded license key.
46+
func GetLicenseKey ()*LicenseKey {return _fc .GetLicenseKey ()};
4647

47-
// GetMeteredState checks the currently used metered document usage status,
48-
// documents used and credits available.
49-
func GetMeteredState ()(_a .MeteredStatus ,error ){return _a .GetMeteredState ()};
48+
// SetMeteredKeyUsageLogVerboseMode sets the metered License API Key usage log verbose mode.
49+
// Default value `false`, set to `true` will log the credit usages and print out to console with log level INFO.
50+
func SetMeteredKeyUsageLogVerboseMode (val bool ){_fc .SetMeteredKeyUsageLogVerboseMode (val )};

common/logger/logger.go

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -9,96 +9,96 @@
99
// Use of this source code is governed by the UniDoc End User License Agreement
1010
// terms that can be accessed at https://unidoc.io/eula/
1111

12-
package logger ;import (_cd "fmt";_bb "io";_d "os";_b "path/filepath";_cc "runtime";);
12+
package logger ;import (_d "fmt";_e "io";_ce "os";_dc "path/filepath";_c "runtime";);
1313

14-
// Warning does nothing for dummy logger.
15-
func (DummyLogger )Warning (format string ,args ...interface{}){};func (_feb WriterLogger )logToWriter (_fa _bb .Writer ,_cb string ,_ca string ,_cca ...interface{}){_ddb (_fa ,_cb ,_ca ,_cca );};
16-
17-
// Debug logs debug message.
18-
func (_fe WriterLogger )Debug (format string ,args ...interface{}){if _fe .LogLevel >=LogLevelDebug {_bgd :="\u005b\u0044\u0045\u0042\u0055\u0047\u005d\u0020";_fe .logToWriter (_fe .Output ,_bgd ,format ,args ...);};};
14+
// Notice logs notice message.
15+
func (_fcc WriterLogger )Notice (format string ,args ...interface{}){if _fcc .LogLevel >=LogLevelNotice {_ec :="\u005bN\u004f\u0054\u0049\u0043\u0045\u005d ";_fcc .logToWriter (_fcc .Output ,_ec ,format ,args ...);};};
1916

20-
// Debug does nothing for dummy logger.
21-
func (DummyLogger )Debug (format string ,args ...interface{}){};
17+
// Error does nothing for dummy logger.
18+
func (DummyLogger )Error (format string ,args ...interface{}){};var Log Logger =DummyLogger {};
2219

23-
// Trace logs trace message.
24-
func (_fd WriterLogger )Trace (format string ,args ...interface{}){if _fd .LogLevel >=LogLevelTrace {_dec :="\u005b\u0054\u0052\u0041\u0043\u0045\u005d\u0020";_fd .logToWriter (_fd .Output ,_dec ,format ,args ...);};};
20+
// Debug logs debug message.
21+
func (_cg WriterLogger )Debug (format string ,args ...interface{}){if _cg .LogLevel >=LogLevelDebug {_cga :="\u005b\u0044\u0045\u0042\u0055\u0047\u005d\u0020";_cg .logToWriter (_cg .Output ,_cga ,format ,args ...);};};
2522

26-
// Notice logs notice message.
27-
func (_ba ConsoleLogger )Notice (format string ,args ...interface{}){if _ba .LogLevel >=LogLevelNotice {_ee :="\u005bN\u004f\u0054\u0049\u0043\u0045\u005d ";_ba .output (_d .Stdout ,_ee ,format ,args ...);};};
23+
// LogLevel is the verbosity level for logging.
24+
type LogLevel int ;
2825

2926
// IsLogLevel returns true if log level is greater or equal than `level`.
3027
// Can be used to avoid resource intensive calls to loggers.
31-
func (_abc WriterLogger )IsLogLevel (level LogLevel )bool {return _abc .LogLevel >=level };
28+
func (_a ConsoleLogger )IsLogLevel (level LogLevel )bool {return _a .LogLevel >=level };
3229

3330
// Warning logs warning message.
34-
func (_abb WriterLogger )Warning (format string ,args ...interface{}){if _abb .LogLevel >=LogLevelWarning {_ga :="\u005b\u0057\u0041\u0052\u004e\u0049\u004e\u0047\u005d\u0020";_abb .logToWriter (_abb .Output ,_ga ,format ,args ...);};};
31+
func (_ea WriterLogger )Warning (format string ,args ...interface{}){if _ea .LogLevel >=LogLevelWarning {_fdg :="\u005b\u0057\u0041\u0052\u004e\u0049\u004e\u0047\u005d\u0020";_ea .logToWriter (_ea .Output ,_fdg ,format ,args ...);};};
3532

36-
// LogLevel is the verbosity level for logging.
37-
type LogLevel int ;
33+
// IsLogLevel returns true if log level is greater or equal than `level`.
34+
// Can be used to avoid resource intensive calls to loggers.
35+
func (_bg WriterLogger )IsLogLevel (level LogLevel )bool {return _bg .LogLevel >=level };
3836

39-
// Error logs error message.
40-
func (_dd WriterLogger )Error (format string ,args ...interface{}){if _dd .LogLevel >=LogLevelError {_aed :="\u005b\u0045\u0052\u0052\u004f\u0052\u005d\u0020";_dd .logToWriter (_dd .Output ,_aed ,format ,args ...);};};
37+
// Debug does nothing for dummy logger.
38+
func (DummyLogger )Debug (format string ,args ...interface{}){};
4139

42-
// Info does nothing for dummy logger.
43-
func (DummyLogger )Info (format string ,args ...interface{}){};
40+
// DummyLogger does nothing.
41+
type DummyLogger struct{};
4442

45-
// Logger is the interface used for logging in the unipdf package.
46-
type Logger interface{Error (_ce string ,_f ...interface{});Warning (_bd string ,_a ...interface{});Notice (_g string ,_af ...interface{});Info (_bf string ,_e ...interface{});Debug (_db string ,_cec ...interface{});Trace (_cf string ,_fb ...interface{});
47-
IsLogLevel (_ff LogLevel )bool ;};var Log Logger =DummyLogger {};
43+
// SetLogger sets 'logger' to be used by the unidoc unipdf library.
44+
func SetLogger (logger Logger ){Log =logger };
4845

4946
// Debug logs debug message.
50-
func (_bbd ConsoleLogger )Debug (format string ,args ...interface{}){if _bbd .LogLevel >=LogLevelDebug {_fbg :="\u005b\u0044\u0045\u0042\u0055\u0047\u005d\u0020";_bbd .output (_d .Stdout ,_fbg ,format ,args ...);};};
51-
52-
// NewConsoleLogger creates new console logger.
53-
func NewConsoleLogger (logLevel LogLevel )*ConsoleLogger {return &ConsoleLogger {LogLevel :logLevel }};
47+
func (_fd ConsoleLogger )Debug (format string ,args ...interface{}){if _fd .LogLevel >=LogLevelDebug {_dcc :="\u005b\u0044\u0045\u0042\u0055\u0047\u005d\u0020";_fd .output (_ce .Stdout ,_dcc ,format ,args ...);};};
5448

5549
// Notice does nothing for dummy logger.
5650
func (DummyLogger )Notice (format string ,args ...interface{}){};
5751

58-
// SetLogger sets 'logger' to be used by the unidoc unipdf library.
59-
func SetLogger (logger Logger ){Log =logger };
60-
61-
// IsLogLevel returns true if log level is greater or equal than `level`.
62-
// Can be used to avoid resource intensive calls to loggers.
63-
func (_dbf ConsoleLogger )IsLogLevel (level LogLevel )bool {return _dbf .LogLevel >=level };
52+
// NewWriterLogger creates new 'writer' logger.
53+
func NewWriterLogger (logLevel LogLevel ,writer _e .Writer )*WriterLogger {logger :=WriterLogger {Output :writer ,LogLevel :logLevel };return &logger ;};
6454

65-
// Error does nothing for dummy logger.
66-
func (DummyLogger )Error (format string ,args ...interface{}){};
55+
// Logger is the interface used for logging in the unipdf package.
56+
type Logger interface{Error (_b string ,_ba ...interface{});Warning (_fg string ,_cf ...interface{});Notice (_g string ,_baf ...interface{});Info (_bd string ,_df ...interface{});Debug (_cc string ,_cfb ...interface{});Trace (_eg string ,_fa ...interface{});
57+
IsLogLevel (_ca LogLevel )bool ;};
6758

68-
// Warning logs warning message.
69-
func (_ccg ConsoleLogger )Warning (format string ,args ...interface{}){if _ccg .LogLevel >=LogLevelWarning {_gd :="\u005b\u0057\u0041\u0052\u004e\u0049\u004e\u0047\u005d\u0020";_ccg .output (_d .Stdout ,_gd ,format ,args ...);};};
59+
// Notice logs notice message.
60+
func (_ab ConsoleLogger )Notice (format string ,args ...interface{}){if _ab .LogLevel >=LogLevelNotice {_fb :="\u005bN\u004f\u0054\u0049\u0043\u0045\u005d ";_ab .output (_ce .Stdout ,_fb ,format ,args ...);};};
7061

71-
// NewWriterLogger creates new 'writer' logger.
72-
func NewWriterLogger (logLevel LogLevel ,writer _bb .Writer )*WriterLogger {logger :=WriterLogger {Output :writer ,LogLevel :logLevel };return &logger ;};
62+
// Trace logs trace message.
63+
func (_fc ConsoleLogger )Trace (format string ,args ...interface{}){if _fc .LogLevel >=LogLevelTrace {_ceg :="\u005b\u0054\u0052\u0041\u0043\u0045\u005d\u0020";_fc .output (_ce .Stdout ,_ceg ,format ,args ...);};};
7364

7465
// Info logs info message.
75-
func (_ab ConsoleLogger )Info (format string ,args ...interface{}){if _ab .LogLevel >=LogLevelInfo {_eg :="\u005bI\u004e\u0046\u004f\u005d\u0020";_ab .output (_d .Stdout ,_eg ,format ,args ...);};};
66+
func (_gcb WriterLogger )Info (format string ,args ...interface{}){if _gcb .LogLevel >=LogLevelInfo {_ee :="\u005bI\u004e\u0046\u004f\u005d\u0020";_gcb .logToWriter (_gcb .Output ,_ee ,format ,args ...);};};func (_fac ConsoleLogger )output (_egc _e .Writer ,_ef string ,_bf string ,_cab ...interface{}){_cdg (_egc ,_ef ,_bf ,_cab ...);
67+
};
7668

77-
// ConsoleLogger is a logger that writes logs to the 'os.Stdout'
78-
type ConsoleLogger struct{LogLevel LogLevel ;};
69+
// Warning does nothing for dummy logger.
70+
func (DummyLogger )Warning (format string ,args ...interface{}){};
71+
72+
// Info does nothing for dummy logger.
73+
func (DummyLogger )Info (format string ,args ...interface{}){};
74+
75+
// Error logs error message.
76+
func (_ff ConsoleLogger )Error (format string ,args ...interface{}){if _ff .LogLevel >=LogLevelError {_cd :="\u005b\u0045\u0052\u0052\u004f\u0052\u005d\u0020";_ff .output (_ce .Stdout ,_cd ,format ,args ...);};};func _cdg (_ffb _e .Writer ,_ae string ,_ega string ,_eaa ...interface{}){_ ,_bad ,_cgad ,_ebd :=_c .Caller (3);
77+
if !_ebd {_bad ="\u003f\u003f\u003f";_cgad =0;}else {_bad =_dc .Base (_bad );};_dcd :=_d .Sprintf ("\u0025s\u0020\u0025\u0073\u003a\u0025\u0064 ",_ae ,_bad ,_cgad )+_ega +"\u000a";_d .Fprintf (_ffb ,_dcd ,_eaa ...);};
78+
79+
// Error logs error message.
80+
func (_dbc WriterLogger )Error (format string ,args ...interface{}){if _dbc .LogLevel >=LogLevelError {_cda :="\u005b\u0045\u0052\u0052\u004f\u0052\u005d\u0020";_dbc .logToWriter (_dbc .Output ,_cda ,format ,args ...);};};
7981

8082
// Trace does nothing for dummy logger.
8183
func (DummyLogger )Trace (format string ,args ...interface{}){};
8284

85+
// IsLogLevel returns true from dummy logger.
86+
func (DummyLogger )IsLogLevel (level LogLevel )bool {return true };const (LogLevelTrace LogLevel =5;LogLevelDebug LogLevel =4;LogLevelInfo LogLevel =3;LogLevelNotice LogLevel =2;LogLevelWarning LogLevel =1;LogLevelError LogLevel =0;);
87+
8388
// Info logs info message.
84-
func (_gg WriterLogger )Info (format string ,args ...interface{}){if _gg .LogLevel >=LogLevelInfo {_aea :="\u005bI\u004e\u0046\u004f\u005d\u0020";_gg .logToWriter (_gg .Output ,_aea ,format ,args ...);};};
89+
func (_bdb ConsoleLogger )Info (format string ,args ...interface{}){if _bdb .LogLevel >=LogLevelInfo {_gc :="\u005bI\u004e\u0046\u004f\u005d\u0020";_bdb .output (_ce .Stdout ,_gc ,format ,args ...);};};
8590

8691
// Trace logs trace message.
87-
func (_ac ConsoleLogger )Trace (format string ,args ...interface{}){if _ac .LogLevel >=LogLevelTrace {_egg :="\u005b\u0054\u0052\u0041\u0043\u0045\u005d\u0020";_ac .output (_d .Stdout ,_egg ,format ,args ...);};};const (LogLevelTrace LogLevel =5;LogLevelDebug LogLevel =4;
88-
LogLevelInfo LogLevel =3;LogLevelNotice LogLevel =2;LogLevelWarning LogLevel =1;LogLevelError LogLevel =0;);
92+
func (_ccc WriterLogger )Trace (format string ,args ...interface{}){if _ccc .LogLevel >=LogLevelTrace {_cb :="\u005b\u0054\u0052\u0041\u0043\u0045\u005d\u0020";_ccc .logToWriter (_ccc .Output ,_cb ,format ,args ...);};};
8993

90-
// DummyLogger does nothing.
91-
type DummyLogger struct{};
94+
// NewConsoleLogger creates new console logger.
95+
func NewConsoleLogger (logLevel LogLevel )*ConsoleLogger {return &ConsoleLogger {LogLevel :logLevel }};
9296

9397
// WriterLogger is the logger that writes data to the Output writer
94-
type WriterLogger struct{LogLevel LogLevel ;Output _bb .Writer ;};
95-
96-
// Error logs error message.
97-
func (_ae ConsoleLogger )Error (format string ,args ...interface{}){if _ae .LogLevel >=LogLevelError {_dc :="\u005b\u0045\u0052\u0052\u004f\u0052\u005d\u0020";_ae .output (_d .Stdout ,_dc ,format ,args ...);};};func _ddb (_fad _bb .Writer ,_gf string ,_fc string ,_egb ...interface{}){_ ,_afg ,_def ,_ag :=_cc .Caller (3);
98-
if !_ag {_afg ="\u003f\u003f\u003f";_def =0;}else {_afg =_b .Base (_afg );};_aec :=_cd .Sprintf ("\u0025s\u0020\u0025\u0073\u003a\u0025\u0064 ",_gf ,_afg ,_def )+_fc +"\u000a";_cd .Fprintf (_fad ,_aec ,_egb ...);};
98+
type WriterLogger struct{LogLevel LogLevel ;Output _e .Writer ;};
9999

100-
// IsLogLevel returns true from dummy logger.
101-
func (DummyLogger )IsLogLevel (level LogLevel )bool {return true };func (_df ConsoleLogger )output (_ea _bb .Writer ,_da string ,_bg string ,_de ...interface{}){_ddb (_ea ,_da ,_bg ,_de ...);};
100+
// Warning logs warning message.
101+
func (_fag ConsoleLogger )Warning (format string ,args ...interface{}){if _fag .LogLevel >=LogLevelWarning {_ac :="\u005b\u0057\u0041\u0052\u004e\u0049\u004e\u0047\u005d\u0020";_fag .output (_ce .Stdout ,_ac ,format ,args ...);};};
102102

103-
// Notice logs notice message.
104-
func (_aeb WriterLogger )Notice (format string ,args ...interface{}){if _aeb .LogLevel >=LogLevelNotice {_acg :="\u005bN\u004f\u0054\u0049\u0043\u0045\u005d ";_aeb .logToWriter (_aeb .Output ,_acg ,format ,args ...);};};
103+
// ConsoleLogger is a logger that writes logs to the 'os.Stdout'
104+
type ConsoleLogger struct{LogLevel LogLevel ;};func (_ffd WriterLogger )logToWriter (_eb _e .Writer ,_ag string ,_bge string ,_ed ...interface{}){_cdg (_eb ,_ag ,_bge ,_ed );};

common/tempstorage/diskstore/diskstore.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,22 @@
1111

1212
// Package diskstore implements tempStorage interface
1313
// by using disk as a storage
14-
package diskstore ;import (_ce "github.com/unidoc/unioffice/v2/common/tempstorage";_b "io/ioutil";_bf "os";_a "strings";);
15-
16-
// TempFile creates a new temp directory by calling ioutil TempDir
17-
func (_ag diskStorage )TempDir (pattern string )(string ,error ){return _b .TempDir ("",pattern )};
14+
package diskstore ;import (_d "github.com/unidoc/unioffice/v2/common/tempstorage";_gg "io/ioutil";_b "os";_ggd "strings";);
1815

1916
// RemoveAll removes all files in the directory
20-
func (_af diskStorage )RemoveAll (dir string )error {if _a .HasPrefix (dir ,_bf .TempDir ()){return _bf .RemoveAll (dir );};return nil ;};
17+
func (_da diskStorage )RemoveAll (dir string )error {if _ggd .HasPrefix (dir ,_b .TempDir ()){return _b .RemoveAll (dir );};return nil ;};
18+
19+
// SetAsStorage sets temp storage as a disk storage
20+
func SetAsStorage (){_bg :=diskStorage {};_d .SetAsStorage (&_bg )};
2121

2222
// TempFile creates a new temp file by calling ioutil TempFile
23-
func (_ad diskStorage )TempFile (dir ,pattern string )(_ce .File ,error ){return _b .TempFile (dir ,pattern );};
23+
func (_ff diskStorage )TempFile (dir ,pattern string )(_d .File ,error ){return _gg .TempFile (dir ,pattern );};type diskStorage struct{};
2424

2525
// Add is not applicable in the diskstore implementation
26-
func (_cg diskStorage )Add (path string )error {return nil };
27-
28-
// SetAsStorage sets temp storage as a disk storage
29-
func SetAsStorage (){_d :=diskStorage {};_ce .SetAsStorage (&_d )};type diskStorage struct{};
26+
func (_fg diskStorage )Add (path string )error {return nil };
3027

3128
// Open opens file from disk according to a path
32-
func (_cd diskStorage )Open (path string )(_ce .File ,error ){return _bf .OpenFile (path ,_bf .O_RDWR ,0644);};
29+
func (_f diskStorage )Open (path string )(_d .File ,error ){return _b .OpenFile (path ,_b .O_RDWR ,0644)};
30+
31+
// TempFile creates a new temp directory by calling ioutil TempDir
32+
func (_bgb diskStorage )TempDir (pattern string )(string ,error ){return _gg .TempDir ("",pattern )};

0 commit comments

Comments
 (0)