sbase

suckless unix tools
git clone git://git.2f30.org/sbase.git
Log | Files | Refs | README | LICENSE

commit ee6f7d3fc077c0afdfc510e57dc13b326b21fdd8
parent 63d7f29bd987b3621838b788f216983529dd5e5a
Author: FRIGN <dev@frign.de>
Date:   Wed, 28 Jan 2015 19:44:05 +0100

Add trivial equivalence class support in tr(1) and update manpage

Equivalence classes are a hard matter and there's still no "standard"
way to solve the issue.
Previously, tr would just skip those classes, but it's much
better when it resolves a [=c=] to a normal c instead of treating
it as a literal.

Also, reflect recent changes in the manpage (octal escapes) and fix
the markup in some areas.

Diffstat:
tr.1 | 19++++++++++++-------
tr.c | 6++++++
2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/tr.1 b/tr.1 @@ -25,22 +25,27 @@ Squeeze repeated characters matching .Ar set1 or .Ar set2 -if -d is set. +if +.Fl d +is set. .El .Sh SET .Bl -tag -width Ds -.It Literal 'c' -.It Escape sequence '\ec' -\e\e, \ea, \eb, \ef, \en, \er, \et, \ev -.It Range 'c-d' -.It Repeat '[c*n]' +.It Literal Sy c +.It Escape sequence Sy \ec +\e\e, \ea, \eb, \ef, \en, \er, \et, \ev, \eO[OO] +.It Range Sy c-d +.It Repeat Sy [c*n] Only in .Ar set2 . If n = 0 or left out, set n to length of .Ar set1 . -.It Character class '[:class:]' +.It Character class Sy [:class:] See .Xr wctype 3 . +.It Equivalence class Sy [=c=] +Resolve to +.Sy c . .El .Sh TRANSLATION If no options are specified, diff --git a/tr.c b/tr.c @@ -143,6 +143,12 @@ nextbrack: /* CLASSES [=EQUIV=] (skip) */ if (j - i > 3 && rstr[i + 1] == '=' && rstr[m - 1] == '=') { + if (j - i != 4) + goto literal; + (*set)[setranges].start = rstr[i + 2]; + (*set)[setranges].end = rstr[i + 2]; + (*set)[setranges].quant = 1; + setranges++; i = j; continue; }