forked from LeenkxTeam/LNXSDK
Update Files
This commit is contained in:
189
Kha/Backends/Kinc-hxcpp/khacpp/tools/hxcpp/Log.hx
Normal file
189
Kha/Backends/Kinc-hxcpp/khacpp/tools/hxcpp/Log.hx
Normal file
@ -0,0 +1,189 @@
|
||||
import haxe.io.Bytes;
|
||||
import sys.io.Process;
|
||||
|
||||
#if haxe4
|
||||
import sys.thread.Mutex;
|
||||
#elseif neko
|
||||
import neko.vm.Mutex;
|
||||
#else
|
||||
import cpp.vm.Mutex;
|
||||
#end
|
||||
|
||||
#if neko
|
||||
import neko.Lib;
|
||||
#else
|
||||
import cpp.Lib;
|
||||
#end
|
||||
|
||||
class Log
|
||||
{
|
||||
public static var mute:Bool= false;
|
||||
public static var quiet:Bool = false;
|
||||
public static var verbose:Bool = false;
|
||||
|
||||
public static var colorSupported:Null<Bool> = null;
|
||||
private static var sentWarnings = new Map<String,Bool>();
|
||||
|
||||
public static var printMutex:Mutex;
|
||||
|
||||
public static inline var RED = "\x1b[31m";
|
||||
public static inline var YELLOW = "\x1b[33m";
|
||||
public static inline var WHITE = "\x1b[37m";
|
||||
public static inline var NORMAL = "\x1b[0m";
|
||||
public static inline var BOLD = "\x1b[1m";
|
||||
public static inline var ITALIC = "\x1b[3m";
|
||||
|
||||
public static function initMultiThreaded()
|
||||
{
|
||||
if (printMutex==null)
|
||||
printMutex = new Mutex();
|
||||
}
|
||||
|
||||
public static function e(message:String):Void
|
||||
{
|
||||
error(message);
|
||||
}
|
||||
public static function error(message:String, verboseMessage:String = "", e:Dynamic = null, terminate:Bool = true):Void
|
||||
{
|
||||
var output;
|
||||
if (verbose && verboseMessage != "")
|
||||
{
|
||||
output = "\x1b[31;1mError:\x1b[0m\x1b[1m " + verboseMessage + "\x1b[0m\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (message=="")
|
||||
output = "\x1b[31;1mError\x1b[0m\n";
|
||||
else
|
||||
output = "\x1b[31;1mError:\x1b[0m \x1b[1m" + message + "\x1b[0m\n";
|
||||
}
|
||||
if (printMutex!=null)
|
||||
printMutex.acquire();
|
||||
Sys.stderr().write(Bytes.ofString(stripColor(output)));
|
||||
if (printMutex!=null)
|
||||
printMutex.release();
|
||||
|
||||
if ((verbose || !terminate) && e != null)
|
||||
Lib.rethrow(e);
|
||||
|
||||
if (terminate)
|
||||
Tools.exit(1);
|
||||
}
|
||||
|
||||
public static function info(message:String, verboseMessage:String = ""):Void
|
||||
{
|
||||
if (!mute)
|
||||
{
|
||||
if (printMutex!=null)
|
||||
printMutex.acquire();
|
||||
if (verbose && verboseMessage != "")
|
||||
{
|
||||
println(verboseMessage);
|
||||
}
|
||||
else if (message != "")
|
||||
{
|
||||
println(message);
|
||||
}
|
||||
if (printMutex!=null)
|
||||
printMutex.release();
|
||||
}
|
||||
}
|
||||
inline public static function v(verboseMessage:String):Void
|
||||
{
|
||||
Log.info("",verboseMessage);
|
||||
}
|
||||
|
||||
public static function lock():Void
|
||||
{
|
||||
if (printMutex!=null)
|
||||
printMutex.acquire();
|
||||
}
|
||||
|
||||
public static function unlock():Void
|
||||
{
|
||||
if (printMutex!=null)
|
||||
printMutex.release();
|
||||
}
|
||||
|
||||
|
||||
public static function print(message:String):Void
|
||||
{
|
||||
if (printMutex!=null)
|
||||
printMutex.acquire();
|
||||
Sys.print(stripColor(message));
|
||||
if (printMutex!=null)
|
||||
printMutex.release();
|
||||
}
|
||||
|
||||
public static function println(message:String):Void
|
||||
{
|
||||
if (printMutex!=null)
|
||||
printMutex.acquire();
|
||||
Sys.println(stripColor(message));
|
||||
if (printMutex!=null)
|
||||
printMutex.release();
|
||||
}
|
||||
|
||||
private static function stripColor(output:String):String
|
||||
{
|
||||
if (colorSupported == null)
|
||||
{
|
||||
if (!BuildTool.isWindows)
|
||||
{
|
||||
var result = -1;
|
||||
try
|
||||
{
|
||||
var process = new Process ("tput", [ "colors" ]);
|
||||
result = process.exitCode ();
|
||||
process.close ();
|
||||
}
|
||||
catch (e:Dynamic) {};
|
||||
|
||||
colorSupported = (result == 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
colorSupported = (Sys.getEnv("TERM") == "xterm" || Sys.getEnv("ANSICON") != null);
|
||||
}
|
||||
}
|
||||
|
||||
if (colorSupported)
|
||||
{
|
||||
return output;
|
||||
}
|
||||
else
|
||||
{
|
||||
var colorCodes:EReg = ~/\x1b\[[^m]+m/g;
|
||||
return colorCodes.replace(output, "");
|
||||
}
|
||||
}
|
||||
|
||||
public static function warn(message:String, verboseMessage:String = "", allowRepeat:Bool = false):Void
|
||||
{
|
||||
if (!mute)
|
||||
{
|
||||
var output = "";
|
||||
if (verbose && verboseMessage != "")
|
||||
{
|
||||
output = "\x1b[33;1mWarning:\x1b[0m \x1b[1m" + verboseMessage + "\x1b[0m";
|
||||
}
|
||||
else if (message != "")
|
||||
{
|
||||
output = "\x1b[33;1mWarning:\x1b[0m \x1b[1m" + message + "\x1b[0m";
|
||||
}
|
||||
|
||||
if (!allowRepeat && sentWarnings.exists (output))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
sentWarnings.set(output, true);
|
||||
|
||||
if (printMutex!=null)
|
||||
printMutex.acquire();
|
||||
println(output);
|
||||
if (printMutex!=null)
|
||||
printMutex.release();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user