Jean-Marc Lasgouttes wrote:
>>>  How portable is -n?
> 
> Angus> It's portable.
> 
> Angus> As in, it's not mentioned here:
> Angus> http://www.student.northpark.edu/pemente/sed/sedfaq6.html#s6.6
> 
> Fair enough. Could you make a patch?

Attached. Looks scary, but the textclass.lst and chklayouts.tex files are 
unchanged by this manipulation.

-- 
Angus
Index: lib/configure.m4
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/lib/configure.m4,v
retrieving revision 1.60.2.17
diff -u -p -r1.60.2.17 configure.m4
--- lib/configure.m4	25 Mar 2005 15:35:52 -0000	1.60.2.17
+++ lib/configure.m4	20 Apr 2005 12:49:20 -0000
@@ -422,23 +422,26 @@ changequote([,])dnl
            if test  x`[eval] echo $ac_n '${found_'$cleanclass'}'` = x ; then
              [eval] "found_$cleanclass=yes"
 changequote(,)dnl
-	     # The sed commands below are a bit scary. Here is what they do:
-	     # 1-3: remove the \DeclareFOO macro and add the correct boolean 
-	     #      at the end of the line telling whether the class is 
-             #      available
-	     # 4: if the macro had an optional argument with several 
-	     #    parameters, only keep the first one
-	     # 5: if the macro did not have an optional argument, provide one 
-	     #    (equal to the class name)
-	     # 6: remove brackets and replace with correctly quoted entries
-	     grep '\\Declare\(LaTeX\|DocBook\|LinuxDoc\)Class' "$file" \
-	      | sed -e 's/^.*\DeclareLaTeXClass *\(.*\)/\1 "false"/' \
-		    -e 's/^.*\DeclareDocBookClass *\(.*\)/\1 "'$bool_docbook'"/' \
-		    -e 's/^.*\DeclareLinuxDocClass *\(.*\)/\1 "'$bool_linuxdoc'"/' \
-		    -e 's/\[\([^,]*\),[^]]*\]/[\1]/' \
-		    -e 's/^{/['$class']{/' \
-		    -e 's/\[\([^]]*\)\] *{\([^}]*\)}/"'$class'" "\1" "\2"/' \
-                    >>textclass.lst
+	     sed -n '
+# For lines containing "\Declare(LaTeX|DocBook|LinuxDoc)Class"
+/\\Declare[LD][a-zA-Z]\{1,\}Class/{
+# Remove the \DeclareFOOClass macro and add the correct boolean 
+# at the end of the line telling whether the class is 
+# available
+s/^.*\DeclareLaTeXClass *\(.*\)/\1 "false"/
+s/^.*\DeclareDocBookClass *\(.*\)/\1 "'$bool_docbook'"/
+s/^.*\DeclareLinuxDocClass *\(.*\)/\1 "'$bool_linuxdoc'"/
+# If the macro had an optional argument with several 
+# parameters, only keep the first one
+s/\[\([^,]*\),[^]]*\]/[\1]/
+# If the macro did not have an optional argument, provide one 
+# (equal to the class name)
+s/^{/['$class']{/
+# Remove brackets and replace with correctly quoted entries
+s/\[\([^]]*\)\] *{\([^}]*\)}/"'$class'" "\1" "\2"/
+# Print the maninpulated text
+p
+}' "$file" >> textclass.lst
            fi
 	 fi ;;
     esac
@@ -447,7 +450,7 @@ changequote(,)dnl
 else
   MSG_RESULT(auto)
   rm -f wrap_chkconfig.ltx chkconfig.vars chkconfig.classes chklayouts.tex
-  if ! test -r "chkconfig.ltx" ; then
+  if test ! -r "chkconfig.ltx" ; then
     ln -s "${srcdir}"/chkconfig.ltx .
     rmlink=true
   fi
@@ -465,8 +468,12 @@ EOF
       *) if test -r "$file" ; then 
            class=`echo $file | sed -e 's%^.*layouts/\(.*\)\.layout$%\1%'`
 	   # Generate the proper TestDocClass command for this layout
-	   grep '\\Declare\(LaTeX\|DocBook\|LinuxDoc\)Class' "$file" \
-	      | sed -e 's/^\# *\(.*\)$/\\TestDocClass{'${class}'}{\1}/' 
+	   sed -n '
+# For lines containing "\Declare(LaTeX|DocBook|LinuxDoc)Class"
+/\\Declare[LD][a-zA-Z]\{1,\}Class/{
+# Wrap the entire line (minus the leading "# ") inside a
+# "\TestDocClass{CLASS}{...}" command and print the result.
+s/^\# *\(.*\)$/\\TestDocClass{'${class}'}{\1}/p}' "$file"
 	 fi ;;
     esac
   done > chklayouts.tex

Reply via email to