[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] test defs: add subroutine for input unindenting
From: |
Peter Rosin |
Subject: |
Re: [PATCH] test defs: add subroutine for input unindenting |
Date: |
Thu, 17 Feb 2011 12:15:08 +0100 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101207 Thunderbird/3.1.7 |
Den 2011-02-15 21:19 skrev Ralf Wildenhues:
> It's a bit of a shame this uses a temp file though. awk should be able
> to cope without (but be sure to try old Solaris awk if you go for it).
Ahh, who needs awk? :-)
unindent ()
{
sed -n '
x
:useit
/./{
G
h
s/\n.*//
x
/x\(.*\)\n\1/s///p
s/.*\n//p
d
}
g
/^$/{
p
d
}
s/\([ ]*\).*/x\1/
b useit'
}
Design is this: at the start of the cycle the hold space holds
"x<indent>", so after the <indent> has been found the /./ address
matches and everything below that block is ignored.
The /./ branch works by first setting up both the pattern and hold
to contain "x<indent>\n<input line>" (commands G and h). Then the
hold space is restored to contain "x<indent>" (commands s/\n.*// and
x). Then any matching indentation is removed, and in case the
indentation didn't match, remove the "x<indent>\n" part. And print
and restart a new cycle.
Below the /./ branch, the indentation is discovered. First a copy
of the original input line is made so that it isn't lost. If the
input line is empty (the /^$/ branch is taken), just output it and
keep looking for the first non-empty line. If the input line is
non-empty, remove everything after the last leading whitespace, then
prepend x and then go back up and 'useit' as now the pattern space
contains "x<indent>" and the hold space holds the input line.
One difference with this implementation is that an initial line
with only <space>s and <tab>s will be taken as the desired indent
to remove, where Stefano's version saw that as an empty line.
Too much of a maintenance hassle? You tell me.
Cheers,
Peter
- Re: [Ping PATCHES] {master} Optimize tests `instspc-*.test' for speed., Ralf Wildenhues, 2011/02/14
- Re: [Ping PATCHES] {master} Optimize tests `instspc-*.test' for speed., Stefano Lattarini, 2011/02/15
- [PATCH] test defs: add subroutine for input unindenting (was: Re: [Ping PATCHES] {master} Optimize tests `instspc-*.test' for speed.), Stefano Lattarini, 2011/02/15
- Re: [PATCH] test defs: add subroutine for input unindenting, Ralf Wildenhues, 2011/02/15
- Re: [PATCH] test defs: add subroutine for input unindenting, Stefano Lattarini, 2011/02/15
- Re: [PATCH] test defs: add subroutine for input unindenting, Ralf Wildenhues, 2011/02/16
- Re: [PATCH] test defs: add subroutine for input unindenting, Stefano Lattarini, 2011/02/16
- Re: [PATCH] test defs: add subroutine for input unindenting, Ralf Wildenhues, 2011/02/17
- Re: [PATCH] test defs: add subroutine for input unindenting,
Peter Rosin <=
- Re: [PATCH] test defs: add subroutine for input unindenting, Peter Rosin, 2011/02/17
- Re: [PATCH] test defs: add subroutine for input unindenting, Stefano Lattarini, 2011/02/17
- Re: [PATCH] test defs: add subroutine for input unindenting, Peter Rosin, 2011/02/18
- Re: [PATCH] test defs: add subroutine for input unindenting, Peter Rosin, 2011/02/18
- Re: [PATCH] test defs: add subroutine for input unindenting, Ralf Wildenhues, 2011/02/21
- Re: [PATCH] test defs: add subroutine for input unindenting, Stefano Lattarini, 2011/02/21
- Re: [PATCH] test defs: add subroutine for input unindenting, Ralf Wildenhues, 2011/02/21
- Re: [PATCH] test defs: add subroutine for input unindenting, Peter Rosin, 2011/02/28
- Re: [PATCH] test defs: add subroutine for input unindenting, Peter Rosin, 2011/02/28
- Re: [PATCH] test defs: add subroutine for input unindenting, Stefano Lattarini, 2011/02/28