Erster Commit: nativer Linux-Port aus macOS-Bytecode
Läuft die Voice Acoustic VA-Remotecontrol (AllDSP AllControl) nativ unter Linux auf echtem wxGTK 3.0 — ohne Wine und ohne dekompilierten App-Code. Ausgeführt wird das unveränderte Python-2.7-Bytecode aus dem macOS-.app; C-Extensions (wxGTK/numpy/ scipy/PortAudio) kommen nativ aus Debian stretch. Enthält: va/ (Original-.pyc + pure-Python-Libs + Assets + launch.py mit den drei Linux-Fixes), Dockerfile/run.sh/entrypoint.sh, reference/ (dekompilierter Quellcode zum Debuggen) und README/STATUS. img.cache (378 MB, regenerierbar) ist per .gitignore ausgeschlossen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
from FPDF import *
|
||||
|
||||
class Bookmark(FPDF):
|
||||
def __init__(this,orientation='P',unit='mm',format='A4'):
|
||||
FPDF.__init__(this,orientation,unit,format)
|
||||
this.outlines=[]
|
||||
this.OutlineRoot=None
|
||||
|
||||
def Bookmark(this,txt,level=0,y=0):
|
||||
if(y==-1):
|
||||
y=this.GetY()
|
||||
this.outlines+=[{'t':txt,'l':level,'y':y,'p':this.PageNo()}]
|
||||
|
||||
def _putbookmarks(this):
|
||||
nb=count(this.outlines)
|
||||
if(nb==0):
|
||||
return
|
||||
lru={}
|
||||
level=0
|
||||
for i in range(len(this.outlines)):
|
||||
o=this.outlines[i]
|
||||
if(o['l']>0):
|
||||
parent=lru[o['l']-1]
|
||||
#Set parent and last pointers
|
||||
this.outlines[i]['parent']=parent
|
||||
this.outlines[parent]['last']=i
|
||||
if(o['l']>level):
|
||||
#Level increasing: set first pointer
|
||||
this.outlines[parent]['first']=i
|
||||
else:
|
||||
this.outlines[i]['parent']=nb
|
||||
if(o['l']<=level and i>0):
|
||||
#Set prev and next pointers
|
||||
prev=lru[o['l']]
|
||||
this.outlines[prev]['next']=i
|
||||
this.outlines[i]['prev']=prev
|
||||
lru[o['l']]=i
|
||||
level=o['l']
|
||||
#Outline items
|
||||
n=this.n+1
|
||||
for i in range(len(this.outlines)):
|
||||
o=this.outlines[i]
|
||||
this._newobj()
|
||||
this._out('<</Title '+this._textstring(o['t']))
|
||||
this._out('/Parent '+str(n+o['parent'])+' 0 R')
|
||||
if 'prev' in o:
|
||||
this._out('/Prev '+str(n+o['prev'])+' 0 R')
|
||||
if 'next' in o:
|
||||
this._out('/Next '+str(n+o['next'])+' 0 R')
|
||||
if 'first' in o:
|
||||
this._out('/First '+str(n+o['first'])+' 0 R')
|
||||
if 'last' in o:
|
||||
this._out('/Last '+str(n+o['last'])+' 0 R')
|
||||
this._out(sprintf('/Dest [%d 0 R /XYZ 0 %.2f null]',1+2*o['p'],(this.h-o['y'])*this.k))
|
||||
this._out('/Count 0>>')
|
||||
this._out('endobj')
|
||||
#Outline root
|
||||
this._newobj()
|
||||
this.OutlineRoot=this.n
|
||||
this._out('<</Type /Outlines /First '+str(n)+' 0 R')
|
||||
this._out('/Last '+str(n+lru[0])+' 0 R>>')
|
||||
this._out('endobj')
|
||||
|
||||
|
||||
def _putresources(this):
|
||||
FPDF._putresources(this)
|
||||
this._putbookmarks()
|
||||
|
||||
def _putcatalog(this):
|
||||
FPDF._putcatalog(this)
|
||||
if(count(this.outlines)>0):
|
||||
this._out('/Outlines '+str(this.OutlineRoot)+' 0 R')
|
||||
this._out('/PageMode /UseOutlines')
|
||||
Reference in New Issue
Block a user