summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/scanpages/replicate.py
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/scanpages/replicate.py')
-rwxr-xr-xMaster/texmf-dist/doc/latex/scanpages/replicate.py113
1 files changed, 113 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/scanpages/replicate.py b/Master/texmf-dist/doc/latex/scanpages/replicate.py
new file mode 100755
index 00000000000..99f0395da35
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/scanpages/replicate.py
@@ -0,0 +1,113 @@
+#!/usr/bin/env python
+# Copyright (c) Michael Sharpe, 2014
+# This is free software, subject to the LATEX Project Public License.
+
+import sys
+
+filename=sys.argv[1]
+with open(filename,'r') as f:
+ s=f.read()
+tmp=s.split("%Repetitions=")
+if len(tmp) != 2:
+ print "Bailing! The file does not contain exactly one '%Repetitions='"
+ sys.exit()
+ss=tmp[1]
+tmp2=ss.split('\n')
+numrep=int(tmp2[0])
+#get variable names
+tmp=s.split("%Variables=")
+if len(tmp) != 2:
+ print "Bailing! The file does not contain exactly one '%Variables='"
+ sys.exit()
+ss=tmp[1]
+tmp2=ss.split('\n')
+vbllst=tmp2[0].strip() #like {nnn,0:1+1,1:3+-2}
+vbllst3=vbllst[1:-1]
+vbles=vbllst3.split(',') #line {nnn,0:1+1,1:3+-2}
+n=len(vbles)
+root=vbles[0].strip()
+vlst=[]
+vinit=[]
+vinc=[]
+valt=[]
+for j in range(1,n):
+ vbles[j]=vbles[j].strip().replace("+",":")
+ x=vbles[j].split(":")
+ if len(x) != 3:
+ print "Bad variable descriptor-- " + vbles[j]
+ sys.exit
+ vlst.append(x[0])
+ nnn=0
+ hasp=0
+ if x[2][-1:] == ")":
+ hasp=1
+ nnn=int(x[2][-2])
+ x[2]=x[2][:-3]
+ else:
+ if x[1][0] == "[":
+ nnn=-100
+ if x[2][-2:]=="/2":
+ x[2]=x[2][:-2]
+ if hasp == 1:
+ nnn=-nnn
+ else:
+ nnn=-10
+ valt.append(nnn)
+ if nnn == -100:
+ vinit.append(x[1][1:])
+ vinc.append(x[2][:-1])
+ else:
+ vinit.append(x[1])
+ vinc.append(x[2])
+
+viniti=[]
+vinci=[]
+kk=len(vinit)
+for j in range(kk):
+ try:
+ viniti.append(int(vinit[j]))
+ except:
+ viniti.append(0)
+ try:
+ vinci.append(int(vinc[j]))
+ except:
+ vinci.append(0)
+tmp=s.split('\n')
+m=len(tmp)
+tmp2=[]
+for j in range(2,m):
+ t=tmp[j]
+ if len(t) > 1:
+ t=t[1:]
+ else:
+ t=""
+ tmp2.append(t)
+body='\n'.join(tmp2)
+repl=[s,]
+for p in range(numrep):
+ newbody=body
+ for k in range(kk):
+ v=""
+ alt=valt[k]
+ if alt == -100:
+ if (p % 2) == 1:
+ v=vinc[k]
+ else:
+ v=vinit[k]
+ else:
+ v=viniti[k]
+ if (alt < 0):
+ v=v//2
+ alt=-alt
+ if (alt!=10) and (alt!= 0):
+ v =str(v).zfill(alt)
+ else:
+ v=str(v)
+ newbody=newbody.replace(root+vlst[k],v)
+ viniti[k] =int(viniti[k]) + vinci[k]
+ repl.append(newbody)
+
+with open(filename,'w') as f:
+ for j in range(len(repl)):
+ f.write(repl[j]+'\n')
+