jetzig/cli/commands/unicodeprint.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);
}
}
};