|
|
1.1 ! root 1: BEGIN { ! 2: if(texinp != "") ! 3: ninputs = split(texinp, texinputs, ":") ! 4: else { ! 5: ninputs = 1 ! 6: texinputs[1] = "." ! 7: } ! 8: idef=0 ! 9: } ! 10: /\\newcommand/ { ! 11: ckdef(0, $0, 1) ! 12: next ! 13: } ! 14: /\\def[^a-z]/ { ! 15: ckdef(0, $0, 0) ! 16: next ! 17: } ! 18: /\\(input|include)[{ ]/ { ! 19: getfile() ! 20: next ! 21: } ! 22: /\\bibliography[{ ]/ { ! 23: n = substr($0, index($0,"{")+1, index($0,"}")-index($0,"{")-1) ! 24: if(n ~ ","){ ! 25: num=split(n, b, ",") ! 26: for(i=1;i<=num;i++) ! 27: system("cp " b[i] ".bbl " dir) ! 28: close("cp " b[i] ".bbl " dir) ! 29: } ! 30: else{ ! 31: system("cp " n ".bbl " dir) ! 32: close("cp " n ".bbl " dir) ! 33: } ! 34: } ! 35: /^\\includepicture/ { ! 36: n=index($0,"{")+1 ! 37: fname=substr($0,n,index($0,"}")-n) ! 38: system ("cp " fname ".t " dir ) ! 39: close ("cp " fname ".t " dir ) ! 40: system ("cp " fname ".tex " dir ) ! 41: close ("cp " fname ".tex " dir ) ! 42: } ! 43: /\\special/ { ! 44: getpost($0) ! 45: next ! 46: } ! 47: /\\/ { ! 48: isdef($0) ! 49: next ! 50: } ! 51: /.*/ { ! 52: print $0 ! 53: } ! 54: function getfile( saveline, n, bname, tname, j, name, flag){ ! 55: saveline = $0 ! 56: if($0 ~ /\\input/)n = index($0,"\\input")+7 ! 57: else n=index($0,"\\include")+9 ! 58: bname = substr($0,n) ! 59: gsub(/^[ {]*/,"",bname) ! 60: gsub(/[ }].*/,"",bname) ! 61: gsub(/[ }]$/,"",bname) ! 62: tname = bname ".tex" ! 63: for(j=1; j<= ninputs; j++){ ! 64: name = texinputs[j] "/" tname ! 65: if((getline <name) >=0)break ! 66: name = texinputs[j] "/" bname ! 67: if((getline <name) >=0)break ! 68: name = "" ! 69: } ! 70: if(name == ""){ ! 71: print "cannot open file " bname " or " tname | "cat 1>&2" ! 72: return ! 73: } ! 74: if(name ~ /\/usr\/lib\/tex\/macros/){ ! 75: print saveline ! 76: return ! 77: } ! 78: flag=0 ! 79: while(1){ ! 80: if(flag)if((getline <name)<1)break ! 81: flag=1 ! 82: if($0 ~ /\\newcommand/){ ! 83: ckdef(name, $0, 1) ! 84: continue ! 85: } ! 86: if($0 ~ /\\def[^a-z]/){ ! 87: ckdef(name, $0, 0) ! 88: continue ! 89: } ! 90: if($0 ~ /\\(input|include)[{ ]/){ ! 91: getfile() ! 92: } ! 93: else if($0 ~ /\\special/)getpost($0) ! 94: else if($0 ~ /\\/){ ! 95: isdef($0) ! 96: } ! 97: else print $0 ! 98: } ! 99: close(name) ! 100: } ! 101: function getpost(str){ ! 102: if(str ~ /psfile/){ ! 103: n=substr(str,index(str,"psfile")) ! 104: if(n ~ / /)sub(/ .*/, "", n) ! 105: if(n ~ /\=/)sub(/.*=/, "", n) ! 106: if(n ~ /,$/)sub(/,/, "", n) ! 107: if(n ~ /,.*/)sub(/,.*/, "", n) ! 108: system( "cp " n " " dir) ! 109: close( "cp " n " " dir) ! 110: if(n ~ /\//){ ! 111: num = split(n, xa, /\//) ! 112: sub(n, xa[num], str) ! 113: } ! 114: print str ! 115: } ! 116: else print str ! 117: } ! 118: function ckdef(file, first,new){ ! 119: print first ! 120: if(new){ ! 121: n=index(first,"{")+1 ! 122: name=substr(first,n,index(first,"}")-n) ! 123: name = "\\" name ! 124: n=index(first,"[")+1 ! 125: if(n > 1) ! 126: args=substr(first,n,index(first,"]")-n)+0 ! 127: else args=0 ! 128: } ! 129: else { ! 130: sub(/\\def\\/,"") ! 131: savs = first ! 132: if(first ~ /^[A-Za-z]/){ ! 133: abc=first ! 134: sub(/[^A-Za-z]/,"{",abc) ! 135: name = "\\\\" substr(first,0,index(abc,"{")-1) ! 136: } ! 137: else name = "\\\\" substr(first,0,1) ! 138: if(savs ~ /#/){ ! 139: if(savs ~ "{")gsub(/{.*/, "",savs) ! 140: n=split(savs, z, "#") ! 141: args = n-1 ! 142: } ! 143: else args=0 ! 144: xdef=1 ! 145: } ! 146: if(first ~ "%"){ ! 147: n=split(first, z, "%") ! 148: save = z[1] ! 149: left=gsub(/{/,":",z[1]) ! 150: right=gsub(/}/,";",z[1]) ! 151: } ! 152: else{ ! 153: save = $0 ! 154: left=gsub(/{/,":") ! 155: right=gsub(/}/,";") ! 156: } ! 157: psav = isav = 0 ! 158: if($0 ~ /special/){ ! 159: getpattern(file, save) ! 160: psav++ ! 161: } ! 162: while(left != right || (left == 1 && !xdef)){ ! 163: if(file== 0){ ! 164: if((getline) <1){ ! 165: print "ran out of file in newcommand"|"cat 1>&2" ! 166: exit ! 167: } ! 168: } ! 169: else if((getline<file) < 1){ ! 170: print "ran out of file in newcommand"|"cat 1>&2" ! 171: exit ! 172: } ! 173: save=$0 ! 174: left +=gsub(/{/,":") ! 175: right+=gsub(/}/,";") ! 176: if($0 ~ /special/){ ! 177: getpattern(file, save) ! 178: psav++ ! 179: } ! 180: if($0 ~ /(input|include)/){ ! 181: getpattern(file, save) ! 182: isav++ ! 183: } ! 184: else print save ! 185: } ! 186: if(psav||isav){ ! 187: argct[idef] = args ! 188: if(psave)post[idef] = psav ! 189: else inp[idef]=isav ! 190: def[idef++] = name ! 191: } ! 192: ! 193: } ! 194: function getpattern(file, command){ ! 195: save = command ! 196: if(command ~ /psfile/){ ! 197: n=substr(command, index(command, "psfile")) ! 198: sub(/.*=[ \t]*/,"",n) ! 199: sub(/}*$/,"",n) ! 200: sub(/ .*/,"",n) ! 201: ckargs(n,save) ! 202: } ! 203: if(command ~ /(input|include)/){ ! 204: if(command ~ /\\input/)n = index(command,"\\input")+7 ! 205: else n=index(command,"\\include")+9 ! 206: bname = substr(command,n) ! 207: gsub(/^[ ]*/,"",bname) ! 208: gsub(/[ }].*/,"",bname) ! 209: gsub(/[ }]$/,"",bname) ! 210: ckargs(bname,save) ! 211: } ! 212: } ! 213: function ckargs(pat,command){ ! 214: if(pat ~ /#/) ! 215: num = substr(pat,index(pat,"#")+1,1) ! 216: else num = 0 ! 217: pattern[idef,num] = pat ! 218: if(command ~ /\//){ ! 219: num = split(pat, xa, /\//) ! 220: sub(n, xa[num], command) ! 221: } ! 222: print command ! 223: } ! 224: function cpfile(name, pat){ ! 225: if(name ~ "}") ! 226: sub(/}.*/,"", name) ! 227: sub(/#./,name,pat) ! 228: system("cp " pat " " dir) ! 229: close("cp " pat " " dir) ! 230: if(name ~ /\//){ ! 231: num = split(name, xa, /\//) ! 232: sub(name, xa[num],string) ! 233: } ! 234: } ! 235: function isdef(string, i, gotarg, a, x, j, l, r){ ! 236: if(idef){ ! 237: for(i=0;i<idef;i++){ ! 238: if(string !~ def[i])continue ! 239: if((i,0) in pattern){ ! 240: system("cp " pattern[idef,0] " " dir) ! 241: close("cp " pattern[idef,0] " " dir) ! 242: break ! 243: } ! 244: gotarg=0 ! 245: a=string ! 246: while(gotarg<argct[i]){ ! 247: x=0 ! 248: if(j=index(a,"{")){ ! 249: x++ ! 250: a = substr(a,j+1) ! 251: if((i,gotarg+1) in pattern) ! 252: cpfile(a, pattern[i,gotarg+1]) ! 253: while(x){ ! 254: l=index(a,"{") ! 255: r=index(a,"}") ! 256: if(!l && !r){ ! 257: getline ! 258: string = string "\n" $0 ! 259: a=$0 ! 260: continue ! 261: } ! 262: if(l<r && l>0){ ! 263: x++ ! 264: a=substr(a,l+1) ! 265: } ! 266: else{ ! 267: a=substr(a,r+1) ! 268: x-- ! 269: } ! 270: } ! 271: gotarg++ ! 272: } ! 273: else { ! 274: getline ! 275: string = string "\n" $0 ! 276: a = $0 ! 277: } ! 278: } ! 279: break ! 280: } ! 281: } ! 282: print string ! 283: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.