source: proto/PDF/cb_pablo.py @ 2948

Last change on this file since 2948 was 2934, checked in by lindanl, 7 years ago

Calculate token lenght

File size: 19.3 KB
Line 
1
2class Basis_bits():
3    bit_0 = 0
4    bit_1 = 0
5    bit_2 = 0
6    bit_3 = 0
7    bit_4 = 0
8    bit_5 = 0
9    bit_6 = 0
10    bit_7 = 0
11
12class Lex ():
13        pdf_mod_bit_1 = 0
14        pdf_mod_bit_2 = 0
15        pdf_mod_bit_3 = 0
16        pdf_mod_bit_4 = 0
17        pdf_mod_bit_5 = 0
18        pdf_mod_bit_6 = 0
19        pdf_mod_bit_7 = 0
20        LParen = 0
21        RParen = 0
22        Backslash = 0
23        Special = 0
24        Percent = 0
25        Period = 0
26        LAngle = 0
27        RAngle = 0
28        LBracket = 0
29        RBracket = 0
30        Slash = 0
31        EOL = 0
32        WS = 0
33        Digit = 0
34        Sign = 0
35        Hex = 0
36        Hash = 0
37        CR = 0
38        LF = 0
39        Oct = 0
40        Nonoct = 0
41        Regular = 0
42       
43class Parity():
44        odd = 0
45        even = 0
46       
47class Escape_Callouts():
48    LParen = 0
49    RParen = 0
50    Oct1 = 0
51    Oct2 = 0
52    Oct3 = 0
53    Nonoct = 0
54
55
56class Out_Callouts():
57    mask = 0
58    hex_opener = 0
59    zeromask = 0
60    delmask = 0
61    hexString_mask = 0
62    names_escapes = 0
63    bit_0 = 0
64    bit_1 = 0
65    bit_2 = 0
66    bit_3 = 0
67    bit_4 = 0
68    bit_5 = 0
69    bit_6 = 0
70    bit_7 = 0
71   
72class marker():
73    starts = 0
74    ends = 0
75    error = 0
76   
77   
78
79def Classify_bytes(basis_bits, lex):
80        temp1 = (basis_bits.bit_1 &~ basis_bits.bit_0)
81        temp2 = (basis_bits.bit_2 &~ basis_bits.bit_3)
82        temp3 = (temp1 & temp2)
83        temp4 = (basis_bits.bit_6 &~ basis_bits.bit_7)
84        temp5 = (basis_bits.bit_4 | basis_bits.bit_5)
85        temp6 = (basis_bits.bit_5 &~ basis_bits.bit_4)
86        temp7 = (temp5 &~ temp6)
87        temp8 = (basis_bits.bit_4 & basis_bits.bit_5)
88        temp9 = (temp7 &~ temp8)
89        temp10 = (temp4 &~ temp9)
90        temp11 = (temp3 & temp10)
91        temp12 = (basis_bits.bit_2 & basis_bits.bit_3)
92        temp13 = (temp1 & temp12)
93        temp14 = (temp4 &~ temp5)
94        temp15 = (temp13 & temp14)
95        temp16 = (temp11 | temp15)
96        temp17 = (basis_bits.bit_6 | basis_bits.bit_7)
97        temp18 = (temp6 &~ temp17)
98        temp19 = (temp13 & temp18)
99        lex.pdf_mod_bit_1 = (temp16 | temp19)
100        lex.pdf_mod_bit_2 = (temp16 | temp19)
101        temp20 = (temp14 | temp18)
102        lex.pdf_mod_bit_3 = (temp13 & temp20)
103        temp21 = (temp4 &~ temp7)
104        temp22 = (temp3 & temp21)
105        temp23 = (temp22 | temp15)
106        lex.pdf_mod_bit_4 = (temp23 | temp19)
107        temp24 = (temp8 & temp4)
108        temp25 = (temp3 & temp24)
109        temp26 = (temp25 | temp15)
110        lex.pdf_mod_bit_5 = (temp26 | temp19)
111        lex.pdf_mod_bit_6 = (temp22 | temp15)
112        lex.pdf_mod_bit_7 = (temp13 & temp20)
113        temp27 = (basis_bits.bit_0 | basis_bits.bit_1)
114        temp28 = (temp2 &~ temp27)
115        temp29 = (basis_bits.bit_4 &~ basis_bits.bit_5)
116        temp30 = (temp29 &~ temp17)
117        lex.LParen = (temp28 & temp30)
118        temp31 = (basis_bits.bit_7 &~ basis_bits.bit_6)
119        temp32 = (temp29 & temp31)
120        lex.RParen = (temp28 & temp32)
121        temp33 = (basis_bits.bit_3 &~ basis_bits.bit_2)
122        temp34 = (temp1 & temp33)
123        temp35 = (temp8 &~ temp17)
124        lex.Backslash = (temp34 & temp35)
125        temp36 = (temp17 &~ temp31)
126        temp37 = (temp29 &~ temp36)
127        temp38 = (temp28 & temp37)
128        temp39 = (temp12 &~ temp27)
129        temp40 = (temp39 & temp35)
130        temp41 = (temp38 | temp40)
131        temp42 = (temp39 & temp24)
132        temp43 = (temp41 | temp42)
133        temp44 = (basis_bits.bit_6 & basis_bits.bit_7)
134        temp45 = (temp29 & temp44)
135        temp46 = (temp34 & temp45)
136        temp47 = (temp43 | temp46)
137        temp48 = (temp8 & temp31)
138        temp49 = (temp34 & temp48)
139        temp50 = (temp47 | temp49)
140        temp51 = (temp13 & temp45)
141        temp52 = (temp50 | temp51)
142        temp53 = (temp13 & temp48)
143        temp54 = (temp52 | temp53)
144        temp55 = (temp6 & temp31)
145        temp56 = (temp28 & temp55)
146        temp57 = (temp54 | temp56)
147        temp58 = (temp8 & temp44)
148        temp59 = (temp28 & temp58)
149        lex.Special = (temp57 | temp59)
150        lex.Percent = (temp28 & temp55)
151        lex.Period = (temp28 & temp24)
152        lex.LAngle = (temp39 & temp35)
153        lex.RAngle = (temp39 & temp24)
154        lex.LBracket = (temp34 & temp45)
155        lex.RBracket = (temp34 & temp48)
156        lex.Slash = (temp28 & temp58)
157        temp60 = (basis_bits.bit_2 | basis_bits.bit_3)
158        temp61 = (temp27 | temp60)
159        temp62 = (temp29 & temp4)
160        temp63 = (temp48 | temp62)
161        lex.EOL = (temp63 &~ temp61)
162        temp64 = (temp5 | temp17)
163        temp65 = (temp61 | temp64)
164        temp66 = (temp35 &~ temp61)
165        temp67 = (temp65 &~ temp66)
166        temp68 = (temp48 &~ temp61)
167        temp69 = (temp67 &~ temp68)
168        temp70 = (temp62 &~ temp61)
169        temp71 = (temp69 &~ temp70)
170        temp72 = (temp32 &~ temp61)
171        temp73 = (temp71 &~ temp72)
172        temp74 = (temp28 &~ temp64)
173        temp75 = (temp73 &~ temp74)
174        lex.WS = (~temp75)
175        temp76 = (basis_bits.bit_5 | basis_bits.bit_6)
176        temp77 = (basis_bits.bit_4 & temp76)
177        lex.Digit = (temp39 &~ temp77)
178        temp78 = (temp48 | temp45)
179        lex.Sign = (temp28 & temp78)
180        temp79 = (temp1 &~ temp60)
181        temp80 = (temp79 &~ basis_bits.bit_4)
182        temp81 = (~temp44)
183        temp82 = ((basis_bits.bit_5 & temp81)|(~(basis_bits.bit_5) & temp17))
184        temp83 = (temp80 & temp82)
185        temp84 = (lex.Digit | temp83)
186        temp85 = (temp3 &~ basis_bits.bit_4)
187        temp86 = (temp85 & temp82)
188        lex.Hex = (temp84 | temp86)
189        temp87 = (temp44 &~ temp5)
190        lex.Hash = (temp28 & temp87)
191        lex.CR = (temp48 &~ temp61)
192        lex.LF = (temp62 &~ temp61)
193        lex.Oct = (temp39 &~ basis_bits.bit_4)
194        lex.Nonoct = (temp16 | temp19)
195        lex.Regular = ~ (lex.Special | lex.WS)
196
197       
198def Parse_Escaped(lex, parity, escape_Callouts, out_Callouts):
199 
200        escape_Callouts.LParen = lex.LParen
201        escape_Callouts.RParen = lex.RParen
202        escape_Callouts.Nonoct = 0
203        escape_Callouts.Oct1 = 0
204        escape_Callouts.Oct2 = 0
205        escape_Callouts.Oct3 = 0
206        out_Callouts.delmask = 0
207 
208        if lex.Backslash:
209
210          odd = parity.odd
211          even = parity.even
212
213          escape_mark = lex.Backslash
214          escaped = pablo.Advance(lex.Backslash)
215          # Check for \\ and longer backslash runs; mark the 1st, 3rd, 5th ...
216          # as escape_marks, the 2nd, 4th, 6th as escaped.
217          start = escape_mark & escaped
218          if start:
219                  #
220                  even_start = start & even     
221                  even_final = pablo.ScanThru(even_start, lex.Backslash) 
222                  escaped = even_final & odd
223                  escape_mark = even & pablo.SpanUpTo(even_start, even_final)
224                 
225                  odd_start = start & odd
226                  odd_final = pablo.ScanThru(odd_start, lex.Backslash)
227                  escaped = escaped | (odd_final & even)
228                  escape_mark |= (odd & pablo.SpanUpTo(odd_start, odd_final))
229
230          escape_Callouts.LParen = lex.LParen &~ escaped
231          escape_Callouts.RParen = lex.RParen &~ escaped
232          escape_Callouts.Nonoct = lex.Nonoct & escaped
233          escape_Callouts.Oct1 = lex.Oct & escaped
234          if escape_Callouts.Oct1:
235                  escape_Callouts.Oct2 = escape_Callouts.Oct1 & pablo.Lookahead(lex.Oct)
236                  escape_Callouts.Oct1 &= ~escape_Callouts.Oct2
237                  escape_Callouts.Oct3 = escape_Callouts.Oct2 & pablo.Lookahead(lex.Oct, 2)
238                  escape_Callouts.Oct2 &= ~escape_Callouts.Oct3
239          out_Callouts.delmask = escape_mark
240       
241def Parse_Comment(lex, escape_Callouts, marker, out_Callouts):
242  out_Callouts.mask = 0
243  if lex.Percent:
244        knownParen = 0
245        CtCand = lex.Percent
246        line_start = ~pablo.Advance(~lex.EOL)
247        knownNonCtReg = pablo.SpanUpTo(line_start, pablo.ScanTo(line_start, lex.EOL | CtCand))
248        newParen = knownNonCtReg & (escape_Callouts.LParen | escape_Callouts.RParen)
249        while newParen &~ knownParen:
250          knownParen |= newParen
251          pscan = pablo.AdvanceThenScanTo(newParen & escape_Callouts.LParen, escape_Callouts.LParen | escape_Callouts.RParen)
252          pscanReg = pablo.SpanUpTo(newParen & escape_Callouts.LParen, pscan)
253          CtCand = CtCand &~ pscanReg
254          knownNonCtReg = pablo.SpanUpTo(line_start, pablo.ScanTo(line_start, lex.EOL | CtCand))
255          closed = pscan & escape_Callouts.RParen
256          opener = pscan & escape_Callouts.LParen
257          while pablo.inFile(opener):
258            pscan = pablo.AdvanceThenScanTo(opener, escape_Callouts.RParen &~ closed)
259            pscanReg = pablo.SpanUpTo(opener, pscan)
260            CtCand = CtCand &~ pscanReg
261            closed = pscan & escape_Callouts.RParen
262            opener = pscan & escape_Callouts.LParen
263            knownNonCtReg |= pscanReg
264          newParen = knownNonCtReg & (escape_Callouts.LParen | escape_Callouts.RParen)
265        comment = CtCand &~ knownNonCtReg
266        out_Callouts.mask = pablo.InclusiveSpan(comment, pablo.ScanTo(comment, lex.EOL))
267
268def Parse_String(escape_Callouts, marker, out_Callouts):
269        unmatched = escape_Callouts.RParen
270        marker.error = 0
271        pscan = 0
272        qscan = 0
273        pscan = pablo.ScanTo(pablo.Advance(escape_Callouts.LParen), escape_Callouts.LParen | escape_Callouts.RParen)
274        qscan = pablo.ScanTo(pablo.Advance(escape_Callouts.RParen), escape_Callouts.LParen | escape_Callouts.RParen)
275        instring = pablo.ExclusiveSpan(escape_Callouts.LParen, pscan) 
276        closed = pscan & escape_Callouts.RParen
277        unclosed = pscan & escape_Callouts.LParen | qscan & escape_Callouts.RParen
278        marker.error = pablo.atEOF(pscan)
279        all_closed = closed
280        while unclosed:
281                pscan = pablo.ScanTo(pablo.Advance(unclosed & escape_Callouts.LParen), unclosed)
282                qscan = pablo.ScanTo(pablo.Advance(unclosed & escape_Callouts.RParen), unclosed)
283                instring |= pablo.SpanUpTo(unclosed & escape_Callouts.LParen, pscan)
284                closed = pscan & escape_Callouts.RParen
285                unclosed = pscan & escape_Callouts.LParen | qscan & escape_Callouts.RParen
286                all_closed |= closed
287                marker.error |= pablo.atEOF(pscan)
288        #
289        # Any closing paren that was not actually used to close
290        # an opener is in error.
291        out_Callouts.mask |= instring
292        marker.starts = pablo.Advance(~instring)&instring
293        marker.ends = pablo.ScanThru(marker.starts, instring)
294        marker.error |= escape_Callouts.RParen &~ all_closed       
295       
296         
297def Parse_HexStrings(lex, marker, out_Callouts) :
298        hexString_starts = lex.LAngle &~ out_Callouts.mask
299        out_Callouts.hex_opener = hexString_starts
300        out_Callouts.hexString_mask = 0 
301        if hexString_starts:
302                hexString_ends = pablo.ScanThru(pablo.Advance(hexString_starts),lex.Hex|lex.WS)
303                marker.error |= hexString_ends &~ lex.RAngle
304                out_Callouts.hexString_mask = pablo.InclusiveSpan(hexString_starts,hexString_ends)
305                out_Callouts.mask |= out_Callouts.hexString_mask
306                marker.starts |= hexString_starts
307                marker.ends |= hexString_ends
308
309
310def Parse_Names(lex, marker, out_Callouts) :
311        name_starts =lex.Slash &~ out_Callouts.mask
312        names_follows = pablo.ScanThru(pablo.Advance(name_starts), lex.Regular)
313        out_Callouts.names_escapes = lex.Hash & pablo.Lookahead(lex.Hex) & pablo.Lookahead(lex.Hex,2)   
314        out_Callouts.mask |= pablo.InclusiveSpan(name_starts,names_follows)
315        marker.starts |= name_starts
316        marker.ends |= names_follows
317       
318def Parse_Numeric(lex, marker, out_Callouts) :
319        numeric_characters = (lex.Digit | lex.Period | lex.Sign)
320        numeric_starts = (numeric_characters &~ pablo.Advance(lex.Regular)) &~ out_Callouts.mask
321        numeric_follows = pablo.ScanThru(numeric_starts, lex.Regular)
322        marker.starts |= numeric_starts
323        marker.ends |= numeric_follows
324
325       
326def Parse_Keywords(lex, marker, out_Callouts) :
327        keywords_starts = (lex.Regular &~ pablo.Advance(lex.Regular)) &~ out_Callouts.mask
328        keywords_follows = pablo.ScanThru(keywords_starts, lex.Regular)
329        marker.starts |= keywords_starts       
330        marker.ends |= keywords_follows
331       
332       
333def Prepare_content_buffer(basis_bits, lex, marker, parity, escape_Callouts, out_Callouts):
334
335    out_Callouts.bit_0 = basis_bits.bit_0
336    out_Callouts.bit_1 = basis_bits.bit_1
337    out_Callouts.bit_2 = basis_bits.bit_2
338    out_Callouts.bit_3 = basis_bits.bit_3
339    out_Callouts.bit_4 = basis_bits.bit_4
340    out_Callouts.bit_5 = basis_bits.bit_5
341    out_Callouts.bit_6 = basis_bits.bit_6
342    out_Callouts.bit_7 = basis_bits.bit_7
343   
344    names_escapes_scope1 = pablo.Advance(out_Callouts.names_escapes)
345    names_escapes_scope2 = pablo.Advance(names_escapes_scope1)
346    hexstring_nameescape_mask = out_Callouts.hexString_mask | names_escapes_scope1 | names_escapes_scope2
347   
348    if hexstring_nameescape_mask:
349     
350        out_Callouts.delmask |= out_Callouts.hexString_mask & lex.WS
351       
352        NondigitHexString = lex.Hex &~ lex.Digit
353        out_Callouts.bit_0 &= ~hexstring_nameescape_mask
354        out_Callouts.bit_1 &= ~hexstring_nameescape_mask
355        out_Callouts.bit_2 &= ~hexstring_nameescape_mask
356        out_Callouts.bit_3 &= ~hexstring_nameescape_mask
357        out_Callouts.bit_4 |= (hexstring_nameescape_mask & NondigitHexString)
358        carry7 = out_Callouts.bit_7 & NondigitHexString & hexstring_nameescape_mask
359        out_Callouts.bit_7 ^= NondigitHexString & hexstring_nameescape_mask
360        carry6 = out_Callouts.bit_6 & carry7
361        out_Callouts.bit_6 ^= carry7
362        out_Callouts.bit_5 ^= carry6
363       
364    if out_Callouts.hexString_mask:
365        hexsting_partial_start = out_Callouts.hex_opener
366        hexsting_partial_odd_start = hexsting_partial_start & parity.odd
367        hexsting_partial_even_start = hexsting_partial_start & parity.even
368        hexsting_partial_odd_end = pablo.ScanThru(pablo.Advance(hexsting_partial_odd_start),lex.Hex)
369        hexsting_partial_even_end = pablo.ScanThru(pablo.Advance(hexsting_partial_even_start),lex.Hex)
370        hexsting_partial_odd_mask = pablo.ExclusiveSpan(hexsting_partial_odd_start,hexsting_partial_odd_end) | (hexsting_partial_odd_end & parity.odd)       
371        hexsting_partial_even_mask = pablo.ExclusiveSpan(hexsting_partial_even_start,hexsting_partial_even_end) | (hexsting_partial_even_end & parity.even)
372       
373        del_position = (hexsting_partial_odd_mask & parity.even) | (hexsting_partial_even_mask & parity.odd)
374        kept_position = (hexsting_partial_odd_mask & parity.odd) | (hexsting_partial_even_mask & parity.even)
375       
376         
377        hexsting_partial_end = hexsting_partial_odd_end | hexsting_partial_even_end
378        hexsting_partial_ends = hexsting_partial_end
379        kept_positions = kept_position
380        del_positions = del_position
381        del_pre_ends = 0
382        while hexsting_partial_end & lex.WS:
383          del_pre_end = del_position & pablo.Lookahead(lex.WS) 
384          kept_pre_end = kept_position & pablo.Lookahead(lex.WS) 
385         
386          del_even_start = pablo.ScanThru(pablo.Advance(del_pre_end),lex.WS) & parity.even
387          del_odd_start = pablo.ScanThru(pablo.Advance(del_pre_end),lex.WS) & parity.odd
388          kept_even_start = pablo.ScanThru(pablo.Advance(kept_pre_end),lex.WS) & parity.even
389          kept_odd_start = pablo.ScanThru(pablo.Advance(kept_pre_end),lex.WS) & parity.odd
390           
391          del_even_end = pablo.ScanThru(del_even_start,lex.Hex)
392          del_odd_end = pablo.ScanThru(del_odd_start,lex.Hex)
393          kept_even_end = pablo.ScanThru(kept_even_start,lex.Hex)
394          kept_odd_end = pablo.ScanThru(kept_odd_start,lex.Hex)
395         
396          hexsting_partial_odd_mask = pablo.InclusiveSpan(del_even_start,del_even_end) | pablo.InclusiveSpan(kept_odd_start,kept_odd_end) 
397          hexsting_partial_even_mask = pablo.InclusiveSpan(del_odd_start,del_odd_end) | pablo.InclusiveSpan(kept_even_start,kept_even_end)   
398         
399          hexsting_partial_end = del_even_end | del_odd_end | kept_even_end | kept_odd_end
400         
401          kept_position = (hexsting_partial_odd_mask & parity.even) | (hexsting_partial_even_mask & parity.odd)
402          del_position = (hexsting_partial_odd_mask & parity.odd) | (hexsting_partial_even_mask & parity.even)
403          del_position = del_position &~ hexsting_partial_end
404         
405          hexsting_partial_ends |= hexsting_partial_end
406          kept_positions |= kept_position
407          del_positions |= del_position
408          del_pre_ends |= del_pre_end
409         
410     
411        out_Callouts.bit_4 &= ~hexsting_partial_ends
412        out_Callouts.bit_5 &= ~hexsting_partial_ends
413        out_Callouts.bit_6 &= ~hexsting_partial_ends
414        out_Callouts.bit_7 &= ~hexsting_partial_ends
415     
416        out_Callouts.bit_0 = pablo.Advance(del_positions & out_Callouts.bit_4) | (out_Callouts.bit_0 & ~kept_positions) | pablo.ScanThru(pablo.Advance((out_Callouts.bit_4 & del_pre_ends)), lex.WS)
417        out_Callouts.bit_1 = pablo.Advance(del_positions & out_Callouts.bit_5) | (out_Callouts.bit_1 & ~kept_positions) | pablo.ScanThru(pablo.Advance((out_Callouts.bit_5 & del_pre_ends)), lex.WS)
418        out_Callouts.bit_2 = pablo.Advance(del_positions & out_Callouts.bit_6) | (out_Callouts.bit_2 & ~kept_positions) | pablo.ScanThru(pablo.Advance((out_Callouts.bit_6 & del_pre_ends)), lex.WS) 
419        out_Callouts.bit_3 = pablo.Advance(del_positions & out_Callouts.bit_7) | (out_Callouts.bit_3 & ~kept_positions) | pablo.ScanThru(pablo.Advance((out_Callouts.bit_7 & del_pre_ends)), lex.WS) 
420       
421        out_Callouts.delmask |= del_positions
422           
423       
424
425    if escape_Callouts.Nonoct:       
426        out_Callouts.bit_1 ^= ( lex.pdf_mod_bit_1 & escape_Callouts.Nonoct)
427        out_Callouts.bit_2 ^= ( lex.pdf_mod_bit_2 & escape_Callouts.Nonoct)
428        out_Callouts.bit_3 ^= ( lex.pdf_mod_bit_3 & escape_Callouts.Nonoct)
429        out_Callouts.bit_4 ^= ( lex.pdf_mod_bit_4 & escape_Callouts.Nonoct)
430        out_Callouts.bit_5 ^= ( lex.pdf_mod_bit_5 & escape_Callouts.Nonoct)
431        out_Callouts.bit_6 ^= ( lex.pdf_mod_bit_6 & escape_Callouts.Nonoct)
432        out_Callouts.bit_7 ^= ( lex.pdf_mod_bit_7 & escape_Callouts.Nonoct)
433       
434    if out_Callouts.names_escapes:
435        out_Callouts.delmask |= out_Callouts.names_escapes | names_escapes_scope1
436        out_Callouts.bit_0 = (out_Callouts.bit_0 &~ names_escapes_scope2) 
437        out_Callouts.bit_1 = (out_Callouts.bit_1 &~ names_escapes_scope2)
438        out_Callouts.bit_2 = (out_Callouts.bit_2 &~ names_escapes_scope2) 
439        out_Callouts.bit_3 = (out_Callouts.bit_3 &~ names_escapes_scope2) 
440        out_Callouts.bit_0 |= pablo.Advance(out_Callouts.bit_4 & names_escapes_scope1)
441        out_Callouts.bit_1 |= pablo.Advance(out_Callouts.bit_5 & names_escapes_scope1)
442        out_Callouts.bit_2 |= pablo.Advance(out_Callouts.bit_6 & names_escapes_scope1)
443        out_Callouts.bit_3 |= pablo.Advance(out_Callouts.bit_7 & names_escapes_scope1) 
444       
445    if escape_Callouts.Oct1:
446        out_Callouts.bit_0 = (out_Callouts.bit_0 &~ escape_Callouts.Oct1) 
447        out_Callouts.bit_1 = (out_Callouts.bit_1 &~ escape_Callouts.Oct1)
448        out_Callouts.bit_2 = (out_Callouts.bit_2 &~ escape_Callouts.Oct1) 
449        out_Callouts.bit_3 = (out_Callouts.bit_3 &~ escape_Callouts.Oct1) 
450     
451    if escape_Callouts.Oct2:
452        out_Callouts.delmask |= escape_Callouts.Oct2
453        Oct2_scope1 = pablo.Advance(escape_Callouts.Oct2)
454        out_Callouts.bit_2 = (out_Callouts.bit_2 &~ Oct2_scope1) | pablo.Advance(out_Callouts.bit_5 & escape_Callouts.Oct2)
455        out_Callouts.bit_3 = (out_Callouts.bit_3 &~ Oct2_scope1) | pablo.Advance(out_Callouts.bit_6 & escape_Callouts.Oct2)
456        out_Callouts.bit_4 = (out_Callouts.bit_4 &~ Oct2_scope1) | pablo.Advance(out_Callouts.bit_7 & escape_Callouts.Oct2)
457       
458    if escape_Callouts.Oct3:
459        Oct3_scope1 = pablo.Advance(escape_Callouts.Oct3)
460        Oct3_scope2 = pablo.Advance(Oct3_scope1)
461        out_Callouts.delmask |= escape_Callouts.Oct3 | Oct3_scope1
462        temp0 = pablo.Advance(out_Callouts.bit_6 & escape_Callouts.Oct3)
463        temp1 = pablo.Advance(out_Callouts.bit_7 & escape_Callouts.Oct3)
464        out_Callouts.bit_0 = (out_Callouts.bit_0 &~ Oct3_scope2) | pablo.Advance(temp0)
465        out_Callouts.bit_1 = (out_Callouts.bit_1 &~ Oct3_scope2) | pablo.Advance(temp1)
466        out_Callouts.bit_2 = (out_Callouts.bit_2 &~ Oct3_scope2) | pablo.Advance(out_Callouts.bit_5 & Oct3_scope1)
467        out_Callouts.bit_3 = (out_Callouts.bit_3 &~ Oct3_scope2) | pablo.Advance(out_Callouts.bit_6 & Oct3_scope1)
468        out_Callouts.bit_4 = (out_Callouts.bit_4 &~ Oct3_scope2) | pablo.Advance(out_Callouts.bit_7 & Oct3_scope1)       
469     
470 
471    out_Callouts.zeromask = out_Callouts.delmask 
472    out_Callouts.bit_0 = out_Callouts.bit_0 &~ out_Callouts.zeromask   
473    out_Callouts.bit_1 = out_Callouts.bit_1 &~ out_Callouts.zeromask
474    out_Callouts.bit_2 = out_Callouts.bit_2 &~ out_Callouts.zeromask
475    out_Callouts.bit_3 = out_Callouts.bit_3 &~ out_Callouts.zeromask
476    out_Callouts.bit_4 = out_Callouts.bit_4 &~ out_Callouts.zeromask
477    out_Callouts.bit_5 = out_Callouts.bit_5 &~ out_Callouts.zeromask
478    out_Callouts.bit_6 = out_Callouts.bit_6 &~ out_Callouts.zeromask
479    out_Callouts.bit_7 = out_Callouts.bit_7 &~ out_Callouts.zeromask
480   
481
482def Main(basis_bits, lex, escape_Callouts, out_Callouts):
483
484        Classify_bytes(basis_bits, lex)
485
486        Parse_Escaped(lex, parity, escape_Callouts, out_Callouts)
487       
488        Parse_HexStrings(lex, marker, out_Callouts)
489
490        Prepare_content_buffer(basis_bits, lex, escape_Callouts, out_Callouts)
491
492
493
Note: See TracBrowser for help on using the repository browser.