#!/bin/sh

filename=$1

echo "yes" > tmp@
gawk -v filename=$filename '
BEGIN{
  dot=index(filename,".")
  if (dot > 0)
     {filea=substr(filename,1,dot - 1)}
  else
     {filea=filename}

  filetoc=filea".toc"
  while (getline inl < filetoc > 0)
        {i=i+1;toc[i]=inl
        }
  tocno=i

  close(filea ".toc")
  
  fileout=filea".out"
  i=0
  while (getline inl < fileout > 0)
        {i=i+1;out[i]=inl
        }
  outno=i
  close(filea ".out")

  i=0
  while (getline inl < "def@macro" > 0)
        {i=i+1;defmacro[i]=inl}
  defmacrono=i
  close("def@macro")
  i=0

  font[1]="\\\\KAI"; font[2]="\\\\LI"; font[3]="\\\\YUAN"; font[4]="\\\\MR"
  font[5]="\\\\WUMING"; font[6]="\\\\WUFS"; font[7]="\\\\HEI"; font[8]="\\\\WUHEI"
  font[9]="\\\\MOESUNG"; font[10]="\\\\MOEKAI"; font[11]="\\\\IDMING"
  font[12]="\\\\MING"; font[13]="\\\\ming"; font[14]="\\\\moesung"; font[15]="\\\\moekai" 
  font[16]="\\\\kai"; font[17]="\\\\li"; font[18]="\\\\fs" 
  font[19]="\\\\wdming"; font[20]="\\\\wdmingb"; font[21]="\\\\wdmingi"; font[22]="\\\\wdmingbi" 
  font[23]="\\\\wdkai"; font[24]="\\\\wdkaib"; font[25]="\\\\wdkaibi" 
  font[26]="\\\\moekai"; font[27]="\\\\moekaib"; font[28]="\\\\moekaibi" 
  font[29]="\\\\moesung"; font[30]="\\\\moesungb"; font[31]="\\\\moesungi"; font[32]="\\\\moesungbi" 
  font[33]="\\\\idming"; font[34]="\\\\idmingb"; font[35]="\\\\idmingi"; font[36]="\\\\idmingbi" 

}
{
   i=1
   for (i; i<=outno; i++)
     {
       lbr=index(out[i],"{")
       if (lbr > 0)
        {rbr=index(out[i],"}")
         if (rbr>lbr)
          {
           inbr=substr(out[i],lbr+1,rbr-lbr-1)
           osection=inbr
           outnextlbr=rbr+1
           
           outlline=substr(out[i],1,rbr+1)
           outrline=substr(out[i],rbr+2)
           outnextrbr=index(outrline,"}")
           secondinbr=substr(outrline,1,outnextrbr-1)

           if (secondinbr != "")
              {outlline=outlline secondinbr
               outrline=substr(outrline,outnextrbr)
              }

           j=1
           for (j; j<=tocno; j++)
            {
             llen=length(toc[j])
             k=1
             for (k; k<=llen; k++)
              {ch=substr(toc[j],llen-k+1,1)
               if (ch=="}"){rbr=llen-k+1}
               if (ch=="{"){lbr=llen-k+1;break}
              }
             
             inbr=substr(toc[j],lbr+1,rbr-lbr-1)
             tsection=inbr


             if (osection == tsection)                      
              {
               chtmp=index(toc[j],"\\ch@tmp")
               if (chtmp > 0)
                  {toctmp=substr(toc[j],chtmp)
                   sp=index(toctmp," ")
                   defmac=substr(toctmp,1,sp-1)
                   kk=1 
                   for (kk; kk<=defmacrono; kk++)
                     {chattmp=index(defmacro[kk],"\\ch@tmp")
                      if (chattmp>0)
                        {
                         lbr=index(defmacro[kk],"{")
                    defmactmp=substr(defmacro[kk],chattmp,lbr-chattmp)
                         rbr=index(defmacro[kk],"}")
                         cdefmacro=substr(defmacro[kk],lbr+1,rbr-lbr-1)

                        }
                      if (defmactmp == defmac)
                        {repldefmacro=cdefmacro;break}
                     }       
                   outline=outlline repldefmacro outrline
                   print outline > "tex@.out"
                   break
                  }
                else
                  {
                    chtmp=index(toc[j],"\\ch@@box")
                    if (chtmp > 0)
                     {toctmp=substr(toc[j],chtmp)
                      sp=index(toctmp," ")
                      defmac=substr(toctmp,1,sp-1)
                      kk=1 
                      for (kk; kk<=defmacrono; kk++)
                        {chattmp=index(defmacro[kk],"\\ch@@box")
                        if (chattmp>0)
                          {eq=index(defmacro[kk],"=")
                           lbr=index(defmacro[kk],"{")
                           defmactmp=substr(defmacro[kk],chattmp,eq-chattmp)
                           
                           rbr=index(defmacro[kk],"}")
                           bfbsl=index(defmacro[kk],"\\ch@tcfont\\bf")
                           if (bfbsl==0)
                              {bfbsl=index(defmacro[kk],"\\ch@hdfont\\bf")}
                           if (bfbsl > 0)
                              {cdefmacro=substr(defmacro[kk],lbr+15,rbr-lbr-15)}
                           else
                              {cdefmacro=substr(defmacro[kk],lbr+5,rbr-lbr-5)}  

                           }
                         if (defmactmp == defmac)
                             {j=1
                              for (j; j<=36; j++)
                                 {fontsp=font[j] " "
                                  gsub(fontsp,"",cdefmacro)
                                  gsub(font[j],"",cdefmacro)
                                  } 
                              repldefmacro=cdefmacro;break
                             }
                        }       
                        rbr=index(outrline,"}")
                        outrline=substr(outrline,rbr)
                        outline=outlline repldefmacro outrline
                        print outline > "tex@.out"
                        break
                       }
                  }
              }
            }
          }
        }     
     }
}
END{} ' tmp@