bug-texinfo
[Top][All Lists]
Advanced

[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.
>>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]