Function resolve [src]

Resolve escapes in target or prereq. Only valid with .target_must_resolve or .prereq_must_resolve.

Prototype

pub fn resolve(self: Token, writer: anytype) @TypeOf(writer).Error!void

Parameters

self: Token

Source

pub fn resolve(self: Token, writer: anytype) @TypeOf(writer).Error!void { switch (self) { .target_must_resolve => |bytes| { var state: enum { start, escape, dollar } = .start; for (bytes) |c| { switch (state) { .start => { switch (c) { '\\' => state = .escape, '$' => state = .dollar, else => try writer.writeByte(c), } }, .escape => { switch (c) { ' ', '#', '\\' => {}, '$' => { try writer.writeByte('\\'); state = .dollar; continue; }, else => try writer.writeByte('\\'), } try writer.writeByte(c); state = .start; }, .dollar => { try writer.writeByte('$'); switch (c) { '$' => {}, else => try writer.writeByte(c), } state = .start; }, } } }, .prereq_must_resolve => |bytes| { var state: enum { start, escape } = .start; for (bytes) |c| { switch (state) { .start => { switch (c) { '\\' => state = .escape, else => try writer.writeByte(c), } }, .escape => { switch (c) { ' ' => {}, '\\' => { try writer.writeByte(c); continue; }, else => try writer.writeByte('\\'), } try writer.writeByte(c); state = .start; }, } } }, else => unreachable, } }