| 1 | 
jmc | 
1.1 | 
#!/bin/sh | 
| 2 | 
  | 
  | 
 | 
| 3 | 
  | 
  | 
if test $# != 2 | 
| 4 | 
  | 
  | 
then | 
| 5 | 
  | 
  | 
  echo 'Usage:'`basename $0`'  {tex_file.templ} {data_file} :' | 
| 6 | 
  | 
  | 
  echo ' replace >>>PUT_LINE_NB:{variable_name}=<<< in file {tex_file.templ}' | 
| 7 | 
  | 
  | 
  echo ' with line number in file {data_file} that corresponds to the' | 
| 8 | 
  | 
  | 
  echo ' description of variable {variable_name}' | 
| 9 | 
  | 
  | 
  echo 'LIMITATION: a) no space / blank between PUT_LINE_NB and "="' | 
| 10 | 
  | 
  | 
  echo '            b) no space in the variable name' | 
| 11 | 
  | 
  | 
  echo '               (e.g.:  "#YYY=" works, but "# YYY=" does not)' | 
| 12 | 
  | 
  | 
  exit | 
| 13 | 
  | 
  | 
else | 
| 14 | 
  | 
  | 
 texFil=$1 | 
| 15 | 
  | 
  | 
 inpFil=$2 | 
| 16 | 
  | 
  | 
fi | 
| 17 | 
  | 
  | 
 | 
| 18 | 
  | 
  | 
outFil=`echo $texFil.tex | sed 's/.templ//'` | 
| 19 | 
  | 
  | 
tmpFil1=TTT_fil1.$$ | 
| 20 | 
  | 
  | 
tmpFil2=TTT_fil2.$$ | 
| 21 | 
  | 
  | 
dbug= | 
| 22 | 
  | 
  | 
 | 
| 23 | 
  | 
  | 
#texFil='inp_tst' | 
| 24 | 
  | 
  | 
#outFil=tata | 
| 25 | 
  | 
  | 
#tmpFil1=titi | 
| 26 | 
  | 
  | 
#tmpFil2=toto | 
| 27 | 
  | 
  | 
#dbug=1 | 
| 28 | 
  | 
  | 
 | 
| 29 | 
  | 
  | 
rm -f $outFil $tmpFil1 $tmpFil2 | 
| 30 | 
  | 
  | 
cp -f $texFil $outFil | 
| 31 | 
  | 
  | 
 | 
| 32 | 
  | 
  | 
# take all the lines in texFil where a line-Nb needs to be added: | 
| 33 | 
  | 
  | 
listR=`egrep 'PUT_LINE_NB:' $texFil` | 
| 34 | 
  | 
  | 
if test $dbug ; then echo $listR ; fi | 
| 35 | 
  | 
  | 
 | 
| 36 | 
  | 
  | 
for pp in $listR | 
| 37 | 
  | 
  | 
do | 
| 38 | 
  | 
  | 
 #echo 'pp='$pp | 
| 39 | 
  | 
  | 
 xx=`echo $pp | sed "s/PUT_LINE_NB://g"` | 
| 40 | 
  | 
  | 
 #echo 'xx='$pp | 
| 41 | 
  | 
  | 
 if test $pp != $xx | 
| 42 | 
  | 
  | 
 then | 
| 43 | 
  | 
  | 
#- select the variable name (=xx) to look for (in inpFil & texFil): | 
| 44 | 
  | 
  | 
  if test $dbug ; then echo '  xx='$xx ' <- from pp='$pp ; fi | 
| 45 | 
  | 
  | 
  while test $pp != $xx | 
| 46 | 
  | 
  | 
  do  | 
| 47 | 
  | 
  | 
    pp=$xx | 
| 48 | 
  | 
  | 
    xx=`echo $pp | sed 's/=./=/g'` | 
| 49 | 
  | 
  | 
  done | 
| 50 | 
  | 
  | 
  xx=`echo $pp | sed 's/=$//g'` | 
| 51 | 
  | 
  | 
  if test $dbug ; then echo ' Var name: xx='$xx ; fi | 
| 52 | 
  | 
  | 
#- select the line in texFil that has been copied from inpFil  | 
| 53 | 
  | 
  | 
#    (and needs to receive a line Nb) | 
| 54 | 
  | 
  | 
  egrep $xx $texFil | grep -v 'PUT_LINE_NB:' > $tmpFil1 | 
| 55 | 
  | 
  | 
  if test -s $tmpFil1 | 
| 56 | 
  | 
  | 
  then | 
| 57 | 
  | 
  | 
   #echo 'found' $xx 'in file:' $texFil | 
| 58 | 
  | 
  | 
    out=1; | 
| 59 | 
  | 
  | 
#-  remove space at the beginning of the line: | 
| 60 | 
  | 
  | 
    while test $out = 1 | 
| 61 | 
  | 
  | 
    do  | 
| 62 | 
  | 
  | 
      mv $tmpFil1 $tmpFil2 | 
| 63 | 
  | 
  | 
      sed 's/^ //g' $tmpFil2 > $tmpFil1 | 
| 64 | 
  | 
  | 
      diff $tmpFil1 $tmpFil2 > /dev/null | 
| 65 | 
  | 
  | 
      out=$? | 
| 66 | 
  | 
  | 
    done | 
| 67 | 
  | 
  | 
    yy=$xx | 
| 68 | 
  | 
  | 
    nbT=`egrep -c "^${yy}" $tmpFil1` | 
| 69 | 
  | 
  | 
    if [ $nbT -gt 1 ]  | 
| 70 | 
  | 
  | 
    then | 
| 71 | 
  | 
  | 
#- try to search for "xx=":  | 
| 72 | 
  | 
  | 
#-  count number of blank between variable name "xx" and "=": | 
| 73 | 
  | 
  | 
      nblk=0 | 
| 74 | 
  | 
  | 
      out=`egrep -c "^${yy}=" $tmpFil1` | 
| 75 | 
  | 
  | 
      while test $out = 0 | 
| 76 | 
  | 
  | 
      do | 
| 77 | 
  | 
  | 
        yy="${yy} " ; #echo "yy=${yy}<" | 
| 78 | 
  | 
  | 
        nblk=`expr $nblk + 1` ; | 
| 79 | 
  | 
  | 
        out=`egrep -c "^${yy}=" $tmpFil1` | 
| 80 | 
  | 
  | 
        if [ $nblk -ge 100 ] ; then out=1 ; fi | 
| 81 | 
  | 
  | 
      done | 
| 82 | 
  | 
  | 
      if test $nblk = 100 ; then yy=$xx ; else yy=${yy}"=" ; fi | 
| 83 | 
  | 
  | 
      nbT=`egrep -c "^${yy}" $tmpFil1` | 
| 84 | 
  | 
  | 
      if test $dbug ; then echo 'nblk='$nblk ', nbT='$nbT ", yy=>${yy}<" ; fi | 
| 85 | 
  | 
  | 
    fi | 
| 86 | 
  | 
  | 
  else | 
| 87 | 
  | 
  | 
    nbT=0 | 
| 88 | 
  | 
  | 
  fi | 
| 89 | 
  | 
  | 
  nn='XXX'; | 
| 90 | 
  | 
  | 
  if test $nbT = '1' ; then | 
| 91 | 
  | 
  | 
#-  now take the only line that start with variable name "xx": | 
| 92 | 
  | 
  | 
    LINE=`egrep "^${yy}" $tmpFil1 | sed 's/\*/\\\*/g'` | 
| 93 | 
  | 
  | 
    if test $dbug ; then echo '  LINE='$LINE ; fi | 
| 94 | 
  | 
  | 
#-  find the same line in inpFil and take the line number (nn): | 
| 95 | 
  | 
  | 
    nbI=`egrep -c "$LINE" $inpFil` | 
| 96 | 
  | 
  | 
   #echo 'nbI='$nbI | 
| 97 | 
  | 
  | 
    if test $nbI = 1 | 
| 98 | 
  | 
  | 
    then | 
| 99 | 
  | 
  | 
      nn=`sed -n "/$LINE/=" $inpFil` | 
| 100 | 
  | 
  | 
    else | 
| 101 | 
  | 
  | 
      if test $nbI = '0'; | 
| 102 | 
  | 
  | 
      then echo 'no line found with "'$xx'" in file:' $inpFil | 
| 103 | 
  | 
  | 
      else echo 'too many('$nbI') lines with "'$xx'" in file:' $inpFil | 
| 104 | 
  | 
  | 
      fi | 
| 105 | 
  | 
  | 
    fi | 
| 106 | 
  | 
  | 
  else | 
| 107 | 
  | 
  | 
    if test $nbT = '0'; | 
| 108 | 
  | 
  | 
    then echo 'did not find "'$xx'" in file:' $texFil | 
| 109 | 
  | 
  | 
    else echo 'too many('$nbT') "'$xx'" in file:' $texFil | 
| 110 | 
  | 
  | 
    fi | 
| 111 | 
  | 
  | 
  fi | 
| 112 | 
  | 
  | 
#- replace by the line number (if found), XXX otherwise: | 
| 113 | 
  | 
  | 
  sed "s/PUT_LINE_NB:${xx}=/$nn/" $outFil > $tmpFil1 | 
| 114 | 
  | 
  | 
  if test $dbug ; then echo " Replace PUT_LINE_NB:${xx}= by line number: nn=$nn" ; fi | 
| 115 | 
  | 
  | 
 #if test $dbug ; then echo diff $outFil $tmpFil1 ; diff $outFil $tmpFil1 ; fi | 
| 116 | 
  | 
  | 
  mv $tmpFil1 $outFil | 
| 117 | 
  | 
  | 
 fi | 
| 118 | 
  | 
  | 
done | 
| 119 | 
  | 
  | 
rm -f $tmpFil1 $tmpFil2 | 
| 120 | 
  | 
  | 
if test $dbug ; then echo diff $outFil $texFil ; diff $outFil $texFil ; fi | 
| 121 | 
  | 
  | 
 | 
| 122 | 
  | 
  | 
exit |