type
TScape = packed record
Scaped: String[2];
Unscaped: String[2];
end;
const
{Default replacement table for C-style scape strings}
DefScapes: array [0..8] of TScape = (
(Scaped: '\\'; Unscaped: #01),
(Scaped: '\a'; Unscaped: #07),
(Scaped: '\b'; Unscaped: #08),
(Scaped: '\t'; Unscaped: #09),
(Scaped: '\v'; Unscaped: #11),
(Scaped: '\f'; Unscaped: #12),
(Scaped: '\n'; Unscaped: LineEnding),
(Scaped: '\r'; Unscaped: #13),
(Scaped: #01; Unscaped: '\'));
function Unscape(Source: String): String;
var
i: Integer;
begin
Result := Source;
for i := 0 to High(DefScapes) do
Result := StringReplace(Result,
DefScapes[i].Scaped,
DefScapes[i].Unscaped,
[rfIgnoreCase,rfReplaceAll]);
end;
end;