[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Fwd: REVIEW REQUEST - user manual generation
From: |
Vincent Belaïche |
Subject: |
Re: Fwd: REVIEW REQUEST - user manual generation |
Date: |
Sat, 04 Jun 2016 23:40:25 +0200 |
These two things also work:
--8<----8<----8<----8<----8<-- begin -->8---->8---->8---->8---->8----
in_input_funnies=`echo "$in_input" \
| $SED -e 's![^}#$%&^_{~]!!g; s!\(.\)!\1\'"
"'!g' \
| uniq`
--8<----8<----8<----8<----8<-- end -->8---->8---->8---->8---->8----
--8<----8<----8<----8<----8<-- begin -->8---->8---->8---->8---->8----
in_input_funnies=`echo "$in_input" \
| $SED -e 's![^}#$%&^_{~]!!g; s!\(.\)!\1\''
''!g' \
| uniq`
--8<----8<----8<----8<----8<-- end -->8---->8---->8---->8---->8----
but I prefer the one with "$newline" to keep the sed command on the same
line.
VBR,
Vincent
Le 04/06/2016 à 06:59, Vincent Belaïche a écrit :
> Answering to myself...
>
>> Hello,
>>
>> Le 03/06/2016 à 18:15, Gavin Smith a écrit :
>>>> The problem is that my MSYS sed was version 3.02, and it did not
>>>> recognise \n in the replacement string when you want to make each funny
>>>> character on one line. I made some test with my git bash --- which has
>>>> sed version 4.2.1 --- and recognising \n is OK
>>>>
>>>
>>> Apparently it should be \NEWLINE, where NEWLINE is a newline
>>> character. Quoting is tricky, because \NEWLINE is interpreted as a
>>> line continuation except in single quotes or if the backslash is
>>> escaped. We are in single quotes, but those single quotes are within
>>> backquotes.
>
> Yes quoting can be tricky...
>
> The following works for me w/o going through a list_funnies function:
>
> --8<----8<----8<----8<----8<-- begin -->8---->8---->8---->8---->8----
> in_input_funnies=`echo "$in_input" \
> | $SED -e 's![^}#$%&^_{~]!!g; s!\(.\)!\1\'"$newline"'!g' \
> | uniq`
> --8<----8<----8<----8<----8<-- end -->8---->8---->8---->8---->8----
>
> One must write "$newline", not just $newline, otherwise the expansion
> happens too early and the NEWLINE is not passed as part of the sed
> argument.
>
> Please note that the variable newline is defined at the beginning of
> texi2dvi.
>
> VBR,
> Vincent.
>
>
>>> I avoided this complication by using a function in the following
>>> patch:
>>>
>>> --- texi2dvi (revision 7200)
>>> +++ texi2dvi (working copy)
>>> @@ -918,6 +918,13 @@
>>> fi
>>> }
>>>
>>> +list_funnies ()
>>> +{
>>> + echo "$in_input" \
>>> + | $SED -e 's![^}#$%&^_{~]!!g' -e 's!\(.\)!\1\
>>> +!g' | uniq
>>> +}
>>> +
>>
>> Just to say that I have tried the following both with sed 3.02 and sed
>> 4.2.1:
>>
>> --8<----8<----8<----8<----8<-- begin -->8---->8---->8---->8---->8----
>> $ echo 'ab' | sed -e 's!\(.\)!\1\
>>> !g'
>> a
>> b
>> --8<----8<----8<----8<----8<-- end -->8---->8---->8---->8---->8----
>>
>> and it worked. So, your patch will make it.
>>
>> Just as a minor comment, one could have the two instructions of the sed
>> script in the same -e argument provided that they are semi-colon
>> separated, like this:
>>
>> --8<----8<----8<----8<----8<-- begin -->8---->8---->8---->8---->8----
>> list_funnies ()
>> {
>> echo "$in_input" \
>> | $SED -e 's![^}#$%&^_{~]!!g; s!\(.\)!\1\
>> !g' | uniq
>> }
>> --8<----8<----8<----8<----8<-- end -->8---->8---->8---->8---->8----
>>
>> This would be marginally more readable.
>>
>>> # run_tex - Run TeX as "$tex $in_input", taking care of errors and logs.
>>> run_tex ()
>>> {
>>> @@ -926,9 +933,8 @@
>>> # Check for any unusual characters in the filename.
>>> # However, >, \ and any whitespace characters are not supported
>>> # filenames.
>>> - in_input_funnies=`echo "$in_input" \
>>> - | $SED -e 's![^}#$%&^_{~]!!g' -e 's!\(.\)!\1\n!g' \
>>> - | uniq`
>>> + in_input_funnies=`list_funnies`
>>> +
>>> if test -n "$in_input_funnies" ; then
>>> # Make > an end group character, as it's unlikely to appear in
>>> # a filename.
>>>
>>>
>>>> Ok, one sh only solution would be to do this :
>>>>
>>>> --8<----8<----8<----8<----8<-- begin -->8---->8---->8---->8---->8----
>>>> in_input_funnies=`echo "$in_input" \
>>>> | $SED -e 's![^}#$%&^_{~]!!g' \
>>>> | { while IFS= read -r -n1 -d '' c; do printf '%s\n' "$c"; done } \
>>>> | uniq`
>>>> --8<----8<----8<----8<----8<-- end -->8---->8---->8---->8---->8----
>>>>
>>>> Hopefully this is portable code ;-) ...
>>>
>>> Options to "read" aren't portable AFAIK.
>>
>> Thank you for clarifying the point. Anyway your solution is clearly
>> better.
>>
>> VBR,
>> Vincent.
>>
- Re: Fwd: REVIEW REQUEST - user manual generation, Gavin Smith, 2016/06/01
- Re: Fwd: REVIEW REQUEST - user manual generation, Vincent Belaïche, 2016/06/03
- Re: Fwd: REVIEW REQUEST - user manual generation, Gavin Smith, 2016/06/03
- Re: Fwd: REVIEW REQUEST - user manual generation, Andreas Schwab, 2016/06/03
- Re: Fwd: REVIEW REQUEST - user manual generation, Gavin Smith, 2016/06/03
- Re: Fwd: REVIEW REQUEST - user manual generation, Karl Berry, 2016/06/03
- Re: Fwd: REVIEW REQUEST - user manual generation, Vincent Belaïche, 2016/06/04
- Re: Fwd: REVIEW REQUEST - user manual generation, Gavin Smith, 2016/06/04
- Re: Fwd: REVIEW REQUEST - user manual generation, Vincent Belaïche, 2016/06/03
- Re: Fwd: REVIEW REQUEST - user manual generation, Vincent Belaïche, 2016/06/04
- Re: Fwd: REVIEW REQUEST - user manual generation,
Vincent Belaïche <=
- Re: Fwd: REVIEW REQUEST - user manual generation, Gavin Smith, 2016/06/04
- Re: Fwd: REVIEW REQUEST - user manual generation, Vincent Belaïche, 2016/06/06
- Re: Fwd: REVIEW REQUEST - user manual generation, Vincent Belaïche, 2016/06/12
- Re: Fwd: REVIEW REQUEST - user manual generation, Gavin Smith, 2016/06/13