mirror of
https://github.com/jetzig-framework/jetzig.git
synced 2025-05-14 14:06:08 +00:00
42 lines
1.3 KiB
Zig
42 lines
1.3 KiB
Zig
const std = @import("std");
|
|
const builtin = @import("builtin");
|
|
|
|
pub fn unicodePrint(comptime fmt: []const u8, args: anytype) !void {
|
|
if (builtin.os.tag == .windows) {
|
|
// Windows-specific code
|
|
const cp_out = try UTF8ConsoleOutput.init();
|
|
defer cp_out.deinit();
|
|
|
|
std.debug.print(comptime fmt, args);
|
|
} else {
|
|
// Non-Windows platforms just print normally
|
|
std.debug.print(fmt, args);
|
|
}
|
|
}
|
|
const UTF8ConsoleOutput = struct {
|
|
original: if (builtin.os.tag == .windows) c_uint else void,
|
|
|
|
fn init() !UTF8ConsoleOutput {
|
|
if (builtin.os.tag == .windows) {
|
|
const original = std.os.windows.kernel32.GetConsoleOutputCP();
|
|
if (original == 0) {
|
|
return error.FailedToGetConsoleOutputCP;
|
|
}
|
|
const result = std.os.windows.kernel32.SetConsoleOutputCP(65001); // UTF-8 code page
|
|
if (result == 0) {
|
|
return error.FailedToSetConsoleOutputCP;
|
|
}
|
|
return .{ .original = original };
|
|
}
|
|
// For non-Windows, return an empty struct
|
|
return .{ .original = {} };
|
|
}
|
|
|
|
fn deinit(self: UTF8ConsoleOutput) void {
|
|
if (builtin.os.tag == .windows) {
|
|
// Restore the original code page
|
|
_ = std.os.windows.kernel32.SetConsoleOutputCP(self.original);
|
|
}
|
|
}
|
|
};
|