Initial commit
This commit is contained in:
commit
6b24d631ee
4 changed files with 129 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
zig-out
|
||||||
|
zig-cache
|
1
README.md
Normal file
1
README.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# [txt2txt](https://nulo.in/txt2txt.html)
|
33
build.zig
Normal file
33
build.zig
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
pub fn build(b: *std.build.Builder) void {
|
||||||
|
// Standard target options allows the person running `zig build` to choose
|
||||||
|
// what target to build for. Here we do not override the defaults, which
|
||||||
|
// means any target is allowed, and the default is native. Other options
|
||||||
|
// for restricting supported target set are available.
|
||||||
|
const target = b.standardTargetOptions(.{});
|
||||||
|
|
||||||
|
// Standard release options allow the person running `zig build` to select
|
||||||
|
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
|
||||||
|
const mode = b.standardReleaseOptions();
|
||||||
|
|
||||||
|
const exe = b.addExecutable("tzt2tzt", "src/main.zig");
|
||||||
|
exe.setTarget(target);
|
||||||
|
exe.setBuildMode(mode);
|
||||||
|
exe.install();
|
||||||
|
|
||||||
|
const run_cmd = exe.run();
|
||||||
|
run_cmd.step.dependOn(b.getInstallStep());
|
||||||
|
if (b.args) |args| {
|
||||||
|
run_cmd.addArgs(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
const run_step = b.step("run", "Run the app");
|
||||||
|
run_step.dependOn(&run_cmd.step);
|
||||||
|
|
||||||
|
const exe_tests = b.addTest("src/main.zig");
|
||||||
|
exe_tests.setBuildMode(mode);
|
||||||
|
|
||||||
|
const test_step = b.step("test", "Run unit tests");
|
||||||
|
test_step.dependOn(&exe_tests.step);
|
||||||
|
}
|
93
src/main.zig
Normal file
93
src/main.zig
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
const std = @import("std");
|
||||||
|
const diccionario = [_][]const u8{
|
||||||
|
"e_/¯¯-____",
|
||||||
|
"a___/_//",
|
||||||
|
"r__//¯_/",
|
||||||
|
"d/¯_/¯__",
|
||||||
|
"l/_/ _//",
|
||||||
|
"u___///¯",
|
||||||
|
"v/¯/¯-__",
|
||||||
|
"x/¯¯--_/",
|
||||||
|
"n¯//_-/",
|
||||||
|
"i_/-/¯¯",
|
||||||
|
"c¯¯/__-",
|
||||||
|
"t-/__/¯",
|
||||||
|
"z//_/__",
|
||||||
|
"o__-//",
|
||||||
|
"s-//-_",
|
||||||
|
"p///_-",
|
||||||
|
"b__//¯",
|
||||||
|
"q--_//",
|
||||||
|
"h/¯-¯/",
|
||||||
|
"f_¯/__",
|
||||||
|
"g/ /_",
|
||||||
|
"y_//",
|
||||||
|
"ñ//-",
|
||||||
|
"k--/",
|
||||||
|
"m/_",
|
||||||
|
"w-",
|
||||||
|
"j/",
|
||||||
|
};
|
||||||
|
|
||||||
|
pub fn txt2castellano(
|
||||||
|
allocator: *std.mem.Allocator,
|
||||||
|
stdin: std.fs.File.Reader,
|
||||||
|
stdout: std.fs.File,
|
||||||
|
) !void {
|
||||||
|
const input = try stdin.readAllAlloc(allocator, 1024 * 1024);
|
||||||
|
defer allocator.free(input);
|
||||||
|
|
||||||
|
var ventana: []u8 = input[0..];
|
||||||
|
ventanaLoop: while (ventana.len != 0) {
|
||||||
|
for (diccionario) |letra| {
|
||||||
|
if (std.mem.startsWith(u8, ventana, letra[1..])) {
|
||||||
|
try stdout.writeAll(letra[0..1]);
|
||||||
|
ventana = ventana[letra[1..].len..];
|
||||||
|
continue :ventanaLoop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try stdout.writeAll(ventana[0..1]);
|
||||||
|
ventana = ventana[1..];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn castellano2txt(stdin: std.fs.File.Reader, stdout: std.fs.File) !void {
|
||||||
|
stdin: while (stdin.readByte() catch null) |byte| {
|
||||||
|
for (diccionario) |letra| {
|
||||||
|
if (letra[0] == byte) {
|
||||||
|
try stdout.writeAll(letra[1..]);
|
||||||
|
continue :stdin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try stdout.writeAll(&[_]u8{byte});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn main() !void {
|
||||||
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
const allocator = &gpa.allocator;
|
||||||
|
defer _ = gpa.deinit();
|
||||||
|
|
||||||
|
const stdin = std.io.getStdIn().reader();
|
||||||
|
const stdout = std.io.getStdOut();
|
||||||
|
const stderr = std.io.getStdErr();
|
||||||
|
|
||||||
|
var args = std.process.args();
|
||||||
|
if (!args.skip()) unreachable;
|
||||||
|
if (args.next(allocator)) |arg_union| {
|
||||||
|
const arg = try arg_union;
|
||||||
|
if (std.mem.eql(u8, arg, "castellano")) {
|
||||||
|
try castellano2txt(stdin, stdout);
|
||||||
|
return;
|
||||||
|
} else if (std.mem.eql(u8, arg, "txt")) {
|
||||||
|
try txt2castellano(allocator, stdin, stdout);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try stderr.writeAll(
|
||||||
|
\\tzt2tzt {castellano|txt} < {archivo de texto}
|
||||||
|
\\Castellano si tenés castellano y querés traducir a txt, y viceversa
|
||||||
|
\\
|
||||||
|
);
|
||||||
|
}
|
Loading…
Reference in a new issue