|
|
researchv10 Norman
BEGIN {
if(texinp != "")
ninputs = split(texinp, texinputs, ":")
else {
ninputs = 1
texinputs[1] = "."
}
idef=0
}
/\\newcommand/ {
ckdef(0, $0, 1)
next
}
/\\def[^a-z]/ {
ckdef(0, $0, 0)
next
}
/\\(input|include)[{ ]/ {
getfile()
next
}
/\\bibliography[{ ]/ {
n = substr($0, index($0,"{")+1, index($0,"}")-index($0,"{")-1)
if(n ~ ","){
num=split(n, b, ",")
for(i=1;i<=num;i++)
system("cp " b[i] ".bbl " dir)
close("cp " b[i] ".bbl " dir)
}
else{
system("cp " n ".bbl " dir)
close("cp " n ".bbl " dir)
}
}
/^\\includepicture/ {
n=index($0,"{")+1
fname=substr($0,n,index($0,"}")-n)
system ("cp " fname ".t " dir )
close ("cp " fname ".t " dir )
system ("cp " fname ".tex " dir )
close ("cp " fname ".tex " dir )
}
/\\special/ {
getpost($0)
next
}
/\\/ {
isdef($0)
next
}
/.*/ {
print $0
}
function getfile( saveline, n, bname, tname, j, name, flag){
saveline = $0
if($0 ~ /\\input/)n = index($0,"\\input")+7
else n=index($0,"\\include")+9
bname = substr($0,n)
gsub(/^[ {]*/,"",bname)
gsub(/[ }].*/,"",bname)
gsub(/[ }]$/,"",bname)
tname = bname ".tex"
for(j=1; j<= ninputs; j++){
name = texinputs[j] "/" tname
if((getline <name) >=0)break
name = texinputs[j] "/" bname
if((getline <name) >=0)break
name = ""
}
if(name == ""){
print "cannot open file " bname " or " tname | "cat 1>&2"
return
}
if(name ~ /\/usr\/lib\/tex\/macros/){
print saveline
return
}
flag=0
while(1){
if(flag)if((getline <name)<1)break
flag=1
if($0 ~ /\\newcommand/){
ckdef(name, $0, 1)
continue
}
if($0 ~ /\\def[^a-z]/){
ckdef(name, $0, 0)
continue
}
if($0 ~ /\\(input|include)[{ ]/){
getfile()
}
else if($0 ~ /\\special/)getpost($0)
else if($0 ~ /\\/){
isdef($0)
}
else print $0
}
close(name)
}
function getpost(str){
if(str ~ /psfile/){
n=substr(str,index(str,"psfile"))
if(n ~ / /)sub(/ .*/, "", n)
if(n ~ /\=/)sub(/.*=/, "", n)
if(n ~ /,$/)sub(/,/, "", n)
if(n ~ /,.*/)sub(/,.*/, "", n)
system( "cp " n " " dir)
close( "cp " n " " dir)
if(n ~ /\//){
num = split(n, xa, /\//)
sub(n, xa[num], str)
}
print str
}
else print str
}
function ckdef(file, first,new){
print first
if(new){
n=index(first,"{")+1
name=substr(first,n,index(first,"}")-n)
name = "\\" name
n=index(first,"[")+1
if(n > 1)
args=substr(first,n,index(first,"]")-n)+0
else args=0
}
else {
sub(/\\def\\/,"")
savs = first
if(first ~ /^[A-Za-z]/){
abc=first
sub(/[^A-Za-z]/,"{",abc)
name = "\\\\" substr(first,0,index(abc,"{")-1)
}
else name = "\\\\" substr(first,0,1)
if(savs ~ /#/){
if(savs ~ "{")gsub(/{.*/, "",savs)
n=split(savs, z, "#")
args = n-1
}
else args=0
xdef=1
}
if(first ~ "%"){
n=split(first, z, "%")
save = z[1]
left=gsub(/{/,":",z[1])
right=gsub(/}/,";",z[1])
}
else{
save = $0
left=gsub(/{/,":")
right=gsub(/}/,";")
}
psav = isav = 0
if($0 ~ /special/){
getpattern(file, save)
psav++
}
while(left != right || (left == 1 && !xdef)){
if(file== 0){
if((getline) <1){
print "ran out of file in newcommand"|"cat 1>&2"
exit
}
}
else if((getline<file) < 1){
print "ran out of file in newcommand"|"cat 1>&2"
exit
}
save=$0
left +=gsub(/{/,":")
right+=gsub(/}/,";")
if($0 ~ /special/){
getpattern(file, save)
psav++
}
if($0 ~ /(input|include)/){
getpattern(file, save)
isav++
}
else print save
}
if(psav||isav){
argct[idef] = args
if(psave)post[idef] = psav
else inp[idef]=isav
def[idef++] = name
}
}
function getpattern(file, command){
save = command
if(command ~ /psfile/){
n=substr(command, index(command, "psfile"))
sub(/.*=[ \t]*/,"",n)
sub(/}*$/,"",n)
sub(/ .*/,"",n)
ckargs(n,save)
}
if(command ~ /(input|include)/){
if(command ~ /\\input/)n = index(command,"\\input")+7
else n=index(command,"\\include")+9
bname = substr(command,n)
gsub(/^[ ]*/,"",bname)
gsub(/[ }].*/,"",bname)
gsub(/[ }]$/,"",bname)
ckargs(bname,save)
}
}
function ckargs(pat,command){
if(pat ~ /#/)
num = substr(pat,index(pat,"#")+1,1)
else num = 0
pattern[idef,num] = pat
if(command ~ /\//){
num = split(pat, xa, /\//)
sub(n, xa[num], command)
}
print command
}
function cpfile(name, pat){
if(name ~ "}")
sub(/}.*/,"", name)
sub(/#./,name,pat)
system("cp " pat " " dir)
close("cp " pat " " dir)
if(name ~ /\//){
num = split(name, xa, /\//)
sub(name, xa[num],string)
}
}
function isdef(string, i, gotarg, a, x, j, l, r){
if(idef){
for(i=0;i<idef;i++){
if(string !~ def[i])continue
if((i,0) in pattern){
system("cp " pattern[idef,0] " " dir)
close("cp " pattern[idef,0] " " dir)
break
}
gotarg=0
a=string
while(gotarg<argct[i]){
x=0
if(j=index(a,"{")){
x++
a = substr(a,j+1)
if((i,gotarg+1) in pattern)
cpfile(a, pattern[i,gotarg+1])
while(x){
l=index(a,"{")
r=index(a,"}")
if(!l && !r){
getline
string = string "\n" $0
a=$0
continue
}
if(l<r && l>0){
x++
a=substr(a,l+1)
}
else{
a=substr(a,r+1)
x--
}
}
gotarg++
}
else {
getline
string = string "\n" $0
a = $0
}
}
break
}
}
print string
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.