From eed47fd27121b3999fed61ea1db40f1251427c3d Mon Sep 17 00:00:00 2001 From: "Silas S. Brown" <ssb22@cam.ac.uk> Date: Mon, 4 May 2015 05:36:32 +0000 Subject: [PATCH] Update adjuster/annogen/termlayout git-svn-id: http://svn.code.sf.net/p/e-guidedog/code/ssb22/adjuster@2183 29193198-4895-4776-b068-10539e920549 --- annogen.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/annogen.py b/annogen.py index 83946a1..1293a56 100755 --- a/annogen.py +++ b/annogen.py @@ -484,13 +484,14 @@ int t=pad[i++]; if(i==sizeof(pad)) i=0; if(*s==t) OutWriteByte(t); else OutWriteByte((*s)^t); s++; } }""" % repr(pad)[1:-1] - def encodeOutstr(s): + def encodeOutstr(s,raw=False): i = 0 ; r = [] for c in s: t = pad[i] ; i = (i+1) % len(pad) if ord(c) == t: toApp = t else: toApp = ord(c)^t - if toApp==ord("\\"): r.append(r'\\') + if raw: r.append(chr(toApp)) + elif toApp==ord("\\"): r.append(r'\\') elif toApp==ord('"'): r.append(r'\"') elif toApp&0x80 or toApp<32: r.append(r'\x%x" "' % toApp) else: r.append(chr(toApp)) @@ -522,6 +523,7 @@ static NSMutableData *outBytes; #define NEXTBYTE (*readPtr++) #define NEXT_COPY_BYTE (*writePtr++) #define COPY_BYTE_SKIP writePtr++ +#define COPY_BYTE_SKIPN(n) writePtr += (n) #define POSTYPE const char* #define THEPOS readPtr #define SETPOS(p) (readPtr=(p)) @@ -576,6 +578,7 @@ static size_t outWriteLen,outWritePtr; #define NEXTBYTE (*readPtr++) #define NEXT_COPY_BYTE (*writePtr++) #define COPY_BYTE_SKIP writePtr++ +#define COPY_BYTE_SKIPN(n) writePtr += (n) #define POSTYPE const char* #define THEPOS readPtr #define SETPOS(p) (readPtr=(p)) @@ -664,6 +667,7 @@ unsigned char *p, *copyP, *pOrig; #define NEXTBYTE (*p++) #define NEXT_COPY_BYTE (*copyP++) #define COPY_BYTE_SKIP copyP++ +#define COPY_BYTE_SKIPN(n) copyP += (n) #define POSTYPE unsigned char* #define THEPOS p #define SETPOS(sp) (p=(sp)) @@ -729,6 +733,7 @@ static int near(char* string) { #define NEXTBYTE nextByte() #define NEXT_COPY_BYTE lookahead[(writePtr++)-bufStart] #define COPY_BYTE_SKIP writePtr++ +#define COPY_BYTE_SKIPN(n) writePtr += (n) #define POSTYPE size_t #define THEPOS readPtr /* or get it via a function */ #define SETPOS(p) (readPtr=(p)) /* or set via a func */ @@ -748,7 +753,7 @@ enum { brace_notation} annotation_mode = Default_Annotation_Mode; """ c_switch1=r"""switch (annotation_mode) { - case annotations_only: OutWriteDecode(annot); break; + case annotations_only: OutWriteDecode(annot); COPY_BYTE_SKIPN(numBytes); break; case ruby_markup:""" c_switch2=r"""break; case brace_notation: @@ -1279,7 +1284,7 @@ void o(int numBytes,string annot) { s(); switch (annotation_mode) { case Annotation_Mode.annotations_only: - outBuf.Write(inBytes,writePtr,numBytes); break; + outBuf.Write(annot); break; case Annotation_Mode.ruby_markup: o("<ruby><rb>"); outBuf.Write(inBytes,writePtr,numBytes); @@ -1623,6 +1628,7 @@ class BytecodeAssembler: self.l.append(-labelNo) def addRefToString(self,string): assert type(string)==str + if obfuscate: string = encodeOutstr(string,True) if python or javascript: # prepends with a length hint if possible (or if not # prepends with 0 and null-terminates it) -- GitLab