source: proto/PDF/cb_pablo.py @ 2859

Last change on this file since 2859 was 2859, checked in by lindanl, 6 years ago

hex nyble precalculated.

File size: 9.0 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       
42class Parity():
43        odd = 0
44        even = 0
45       
46class Escape_Callouts():
47    UELParen = 0
48    UERParen = 0
49    Oct1 = 0
50    Oct2 = 0
51    Oct3 = 0
52    Nonoct = 0
53
54
55class Out_Callouts():
56    zeromask = 0
57    delmask = 0
58    hexString_mask = 0
59    bit_0 = 0
60    bit_1 = 0
61    bit_2 = 0
62    bit_3 = 0
63    bit_4 = 0
64    bit_5 = 0
65    bit_6 = 0
66    bit_7 = 0
67   
68class marker():
69    hex_opener = 0
70   
71
72def Classify_bytes(basis_bits, lex):
73        temp1 = (basis_bits.bit_1 &~ basis_bits.bit_0)
74        temp2 = (basis_bits.bit_2 &~ basis_bits.bit_3)
75        temp3 = (temp1 & temp2)
76        temp4 = (basis_bits.bit_6 &~ basis_bits.bit_7)
77        temp5 = (basis_bits.bit_4 | basis_bits.bit_5)
78        temp6 = (basis_bits.bit_5 &~ basis_bits.bit_4)
79        temp7 = (temp5 &~ temp6)
80        temp8 = (basis_bits.bit_4 & basis_bits.bit_5)
81        temp9 = (temp7 &~ temp8)
82        temp10 = (temp4 &~ temp9)
83        temp11 = (temp3 & temp10)
84        temp12 = (basis_bits.bit_2 & basis_bits.bit_3)
85        temp13 = (temp1 & temp12)
86        temp14 = (temp4 &~ temp5)
87        temp15 = (temp13 & temp14)
88        temp16 = (temp11 | temp15)
89        temp17 = (basis_bits.bit_6 | basis_bits.bit_7)
90        temp18 = (temp6 &~ temp17)
91        temp19 = (temp13 & temp18)
92        lex.pdf_mod_bit_1 = (temp16 | temp19)
93        lex.pdf_mod_bit_2 = (temp16 | temp19)
94        temp20 = (temp14 | temp18)
95        lex.pdf_mod_bit_3 = (temp13 & temp20)
96        temp21 = (temp4 &~ temp7)
97        temp22 = (temp3 & temp21)
98        temp23 = (temp22 | temp15)
99        lex.pdf_mod_bit_4 = (temp23 | temp19)
100        temp24 = (temp8 & temp4)
101        temp25 = (temp3 & temp24)
102        temp26 = (temp25 | temp15)
103        lex.pdf_mod_bit_5 = (temp26 | temp19)
104        lex.pdf_mod_bit_6 = (temp22 | temp15)
105        lex.pdf_mod_bit_7 = (temp13 & temp20)
106        temp27 = (basis_bits.bit_0 | basis_bits.bit_1)
107        temp28 = (temp2 &~ temp27)
108        temp29 = (basis_bits.bit_4 &~ basis_bits.bit_5)
109        temp30 = (temp29 &~ temp17)
110        lex.LParen = (temp28 & temp30)
111        temp31 = (basis_bits.bit_7 &~ basis_bits.bit_6)
112        temp32 = (temp29 & temp31)
113        lex.RParen = (temp28 & temp32)
114        temp33 = (basis_bits.bit_3 &~ basis_bits.bit_2)
115        temp34 = (temp1 & temp33)
116        temp35 = (temp8 &~ temp17)
117        lex.Backslash = (temp34 & temp35)
118        temp36 = (temp17 &~ temp31)
119        temp37 = (temp29 &~ temp36)
120        temp38 = (temp28 & temp37)
121        temp39 = (temp12 &~ temp27)
122        temp40 = (temp39 & temp35)
123        temp41 = (temp38 | temp40)
124        temp42 = (temp39 & temp24)
125        temp43 = (temp41 | temp42)
126        temp44 = (basis_bits.bit_6 & basis_bits.bit_7)
127        temp45 = (temp29 & temp44)
128        temp46 = (temp34 & temp45)
129        temp47 = (temp43 | temp46)
130        temp48 = (temp8 & temp31)
131        temp49 = (temp34 & temp48)
132        temp50 = (temp47 | temp49)
133        temp51 = (temp13 & temp45)
134        temp52 = (temp50 | temp51)
135        temp53 = (temp13 & temp48)
136        temp54 = (temp52 | temp53)
137        temp55 = (temp6 & temp31)
138        temp56 = (temp28 & temp55)
139        temp57 = (temp54 | temp56)
140        temp58 = (temp8 & temp44)
141        temp59 = (temp28 & temp58)
142        lex.Special = (temp57 | temp59)
143        lex.Percent = (temp28 & temp55)
144        lex.Period = (temp28 & temp24)
145        lex.LAngle = (temp39 & temp35)
146        lex.RAngle = (temp39 & temp24)
147        lex.LBracket = (temp34 & temp45)
148        lex.RBracket = (temp34 & temp48)
149        lex.Slash = (temp28 & temp58)
150        temp60 = (basis_bits.bit_2 | basis_bits.bit_3)
151        temp61 = (temp27 | temp60)
152        temp62 = (temp29 & temp4)
153        temp63 = (temp48 | temp62)
154        lex.EOL = (temp63 &~ temp61)
155        temp64 = (temp5 | temp17)
156        temp65 = (temp61 | temp64)
157        temp66 = (temp35 &~ temp61)
158        temp67 = (temp65 &~ temp66)
159        temp68 = (temp48 &~ temp61)
160        temp69 = (temp67 &~ temp68)
161        temp70 = (temp62 &~ temp61)
162        temp71 = (temp69 &~ temp70)
163        temp72 = (temp32 &~ temp61)
164        temp73 = (temp71 &~ temp72)
165        temp74 = (temp28 &~ temp64)
166        temp75 = (temp73 &~ temp74)
167        lex.WS = (~temp75)
168        temp76 = (basis_bits.bit_5 | basis_bits.bit_6)
169        temp77 = (basis_bits.bit_4 & temp76)
170        lex.Digit = (temp39 &~ temp77)
171        temp78 = (temp48 | temp45)
172        lex.Sign = (temp28 & temp78)
173        temp79 = (temp1 &~ temp60)
174        temp80 = (temp79 &~ basis_bits.bit_4)
175        temp81 = (~temp44)
176        temp82 = ((basis_bits.bit_5 & temp81)|(~(basis_bits.bit_5) & temp17))
177        temp83 = (temp80 & temp82)
178        temp84 = (lex.Digit | temp83)
179        temp85 = (temp3 &~ basis_bits.bit_4)
180        temp86 = (temp85 & temp82)
181        lex.Hex = (temp84 | temp86)
182        temp87 = (temp44 &~ temp5)
183        lex.Hash = (temp28 & temp87)
184        lex.CR = (temp48 &~ temp61)
185        lex.LF = (temp62 &~ temp61)
186        lex.Oct = (temp39 &~ basis_bits.bit_4)
187        lex.Nonoct = (temp16 | temp19)
188
189       
190def Parse_Escaped(lex, parity, escape_Callouts, out_Callouts):
191
192        odd = parity.odd
193        even = parity.even
194
195        start = lex.Backslash &~ pablo.Advance(lex.Backslash)
196       
197        even_start = start & even       
198        even_final = pablo.ScanThru(even_start, lex.Backslash) 
199        escape = even_final & odd
200        escape_char = even & pablo.SpanUpTo(even_start, even_final)
201       
202        odd_start = start & odd
203        odd_final = pablo.ScanThru(odd_start, lex.Backslash)
204        escape = escape | (odd_final & even)
205        escape_char |= (odd & pablo.SpanUpTo(odd_start, odd_final))
206
207        escape_Callouts.UELParen = lex.LParen &~ escape
208        escape_Callouts.UERParen = lex.RParen &~ escape
209        escape_Callouts.Nonoct = lex.Nonoct & escape   
210        #escape_Callouts.Oct1 = lex.Oct & escape
211        #escape_Callouts.Oct2 = lex.Oct & pablo.Advance(escape_Callouts.Oct1)
212        #escape_Callouts.Oct3 = lex.Oct & pablo.Advance(escape_Callouts.Oct2)
213        out_Callouts.delmask = escape_char
214       
215def Parse_HexStrings(lex, marker, out_Callouts) :
216        hexString_starts = lex.LAngle #&~marker.mask
217        hexString_ends = pablo.ScanThru(pablo.Advance(hexString_starts),lex.Hex|lex.WS)
218        #error = hexString_ends &~ lex.RAngle
219        out_Callouts.hexString_mask = pablo.InclusiveSpan(hexString_starts,hexString_ends)
220        marker.hex_opener = hexString_starts
221        out_Callouts.delmask |= out_Callouts.hexString_mask & lex.WS
222
223##def Parse_Names(lex, marker, out_Callouts) :
224##      name_starts =lex.Slash #&~marker.mask
225##      names_follows = pablo.ScanThru(pablo.Advance(name_starts), lex.Regular)
226##      names_Callouts.escapes = (pablo.Advance(pablo.Advance(lex.Hash)) & pablo.Advance(lex.Hex) & lex.Hex) & pablo.SpanUpTo(names_starts, names_follows)
227##      marker.name_starts = name_starts
228##
229##     
230##def Parse_Numeric(lex, marker, out_Callouts) :
231##      numeric_characters = (lex.Digit | lex.Period | lex.Sign)
232##      numeric_starts = (numeric_characters &~ pablo.Advance(lex.Regular)) &~ marker.mask
233##      numeric_follows = pablo.ScanThru(numeric_starts, lex.Regular)
234##      marker.numeric_starts = numeric_starts
235       
236def Prepare_content_buffer(basis_bits, lex, escape_Callouts, out_Callouts):
237 
238    out_Callouts.zeromask |= out_Callouts.delmask
239
240    out_Callouts.bit_1 = basis_bits.bit_1
241    out_Callouts.bit_2 = basis_bits.bit_2
242    out_Callouts.bit_3 = basis_bits.bit_3
243    out_Callouts.bit_4 = basis_bits.bit_4
244    out_Callouts.bit_5 = basis_bits.bit_5
245    out_Callouts.bit_6 = basis_bits.bit_6
246    out_Callouts.bit_7 = basis_bits.bit_7
247
248   
249    if out_Callouts.hexString_mask:
250        NondigitHexString = lex.Hex &~ lex.Digit
251        out_Callouts.bit_0 &= ~out_Callouts.hexString_mask
252        out_Callouts.bit_1 &= ~out_Callouts.hexString_mask
253        out_Callouts.bit_2 &= ~out_Callouts.hexString_mask
254        out_Callouts.bit_3 &= ~out_Callouts.hexString_mask
255        out_Callouts.bit_4 |= (out_Callouts.hexString_mask & NondigitHexString)
256        carry7 = out_Callouts.bit_7 & NondigitHexString & out_Callouts.hexString_mask
257        out_Callouts.bit_7 ^= NondigitHexString & out_Callouts.hexString_mask
258        carry6 = out_Callouts.bit_6 & carry7
259        out_Callouts.bit_6 ^= carry7
260        out_Callouts.bit_5 ^= carry6
261       
262
263    if escape_Callouts.Nonoct:       
264        out_Callouts.bit_1 ^= ( lex.pdf_mod_bit_1 & escape_Callouts.Nonoct)
265        out_Callouts.bit_2 ^= ( lex.pdf_mod_bit_2 & escape_Callouts.Nonoct)
266        out_Callouts.bit_3 ^= ( lex.pdf_mod_bit_3 & escape_Callouts.Nonoct)
267        out_Callouts.bit_4 ^= ( lex.pdf_mod_bit_4 & escape_Callouts.Nonoct)
268        out_Callouts.bit_5 ^= ( lex.pdf_mod_bit_5 & escape_Callouts.Nonoct)
269        out_Callouts.bit_6 ^= ( lex.pdf_mod_bit_6 & escape_Callouts.Nonoct)
270        out_Callouts.bit_7 ^= ( lex.pdf_mod_bit_7 & escape_Callouts.Nonoct)
271   
272   
273    out_Callouts.bit_0 = out_Callouts.bit_0 &~ out_Callouts.zeromask   
274    out_Callouts.bit_1 = out_Callouts.bit_1 &~ out_Callouts.zeromask
275    out_Callouts.bit_2 = out_Callouts.bit_2 &~ out_Callouts.zeromask
276    out_Callouts.bit_3 = out_Callouts.bit_3 &~ out_Callouts.zeromask
277    out_Callouts.bit_4 = out_Callouts.bit_4 &~ out_Callouts.zeromask
278    out_Callouts.bit_5 = out_Callouts.bit_5 &~ out_Callouts.zeromask
279    out_Callouts.bit_6 = out_Callouts.bit_6 &~ out_Callouts.zeromask
280    out_Callouts.bit_7 = out_Callouts.bit_7 &~ out_Callouts.zeromask
281   
282   
283
284
285def Main(basis_bits, lex, escape_Callouts, out_Callouts):
286
287        Classify_bytes(basis_bits, lex)
288
289        Parse_Escaped(lex, parity, escape_Callouts, out_Callouts)
290       
291        Parse_HexStrings(lex, marker, out_Callouts)
292
293        Prepare_content_buffer(basis_bits, lex, escape_Callouts, out_Callouts)
294
295
296
Note: See TracBrowser for help on using the repository browser.