Changeset 2620 for proto/PDF


Ignore:
Timestamp:
Nov 7, 2012, 3:18:57 PM (6 years ago)
Author:
bhull
Message:

Changes to compilable version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/PDF/pdf.py

    r2596 r2620  
    2929        Slash = 0
    3030        Regular = 0
    31         Delimiter = 0
    3231        LAngle = 0
    3332        RAngle = 0
    3433        Hex = 0
    3534        WS = 0
    36         Digit= 0
     35        Digit = 0
    3736        Sign = 0
    3837        Period = 0
     
    4039        RBracket = 0
    4140        LBracket = 0
     41        Hash = 0
     42        CR = 0
     43        LF = 0
     44        Special = 0
    4245
    4346
     
    4649        UELParen = 0
    4750        UERParen = 0
     51        escapes = 0
    4852
    4953class Comments_Callouts() :
    50         mask= 0
     54        mask = 0
    5155
    5256class LiteralStrings_Callouts() :
    5357        starts = 0
    5458        ends = 0
     59        escapes = 0
     60        carriage_returns = 0
    5561        mask = 0
    5662        error = 0
    5763
    5864class Marker() :
    59         mask=0
     65        mask = 0
    6066
    6167class Names_Callouts() :
    6268        starts = 0
    6369        follows = 0
     70        escapes = 0
    6471
    6572class HexStrings_Callouts() :
     
    6774        ends = 0
    6875        error = 0
     76        hex = 0
    6977
    7078class Numeric_Callouts() :
     
    7583class Keywords_Callouts() :
    7684        starts = 0
     85        ends = 0
     86       
     87class SpecialChars_Callouts() :
     88        starts = 0
    7789        follows = 0
    78        
    79 class Arrays_Callouts() :
    80         starts = 0
    81         ends = 0
    8290
    8391def Classify_bytes(basis_bits, lex): 
    84         temp1 = (basis_bits.bit_0 | basis_bits.bit_1)
    85         temp2 = (basis_bits.bit_2 &~ basis_bits.bit_3)
    86         temp3 = (temp2 &~ temp1)
    87         temp4 = (basis_bits.bit_4 &~ basis_bits.bit_5)
    88         temp5 = (basis_bits.bit_6 | basis_bits.bit_7)
    89         temp6 = (temp4 &~ temp5)
    90         lex.LParen = (temp3 & temp6)
    91         temp7 = (basis_bits.bit_7 &~ basis_bits.bit_6)
    92         temp8 = (temp4 & temp7)
    93         lex.RParen = (temp3 & temp8)
    94         temp9 = (basis_bits.bit_1 &~ basis_bits.bit_0)
    95         temp10 = (basis_bits.bit_3 &~ basis_bits.bit_2)
    96         temp11 = (temp9 & temp10)
    97         temp12 = (basis_bits.bit_4 & basis_bits.bit_5)
    98         temp13 = (temp12 &~ temp5)
    99         lex.Backslash = (temp11 & temp13)
    100         temp14 = (temp5 &~ temp7)
    101         temp15 = (temp4 &~ temp14)
    102         temp16 = (temp3 & temp15)
    103         temp17 = (basis_bits.bit_2 & basis_bits.bit_3)
    104         temp18 = (temp17 &~ temp1)
    105         temp19 = (temp18 & temp13)
    106         temp20 = (temp16 | temp19)
    107         temp21 = (basis_bits.bit_6 &~ basis_bits.bit_7)
    108         temp22 = (temp12 & temp21)
    109         temp23 = (temp18 & temp22)
    110         temp24 = (temp20 | temp23)
    111         temp25 = (basis_bits.bit_6 & basis_bits.bit_7)
    112         temp26 = (temp4 & temp25)
    113         temp27 = (temp11 & temp26)
    114         temp28 = (temp24 | temp27)
    115         temp29 = (temp12 & temp7)
    116         temp30 = (temp11 & temp29)
    117         temp31 = (temp28 | temp30)
    118         temp32 = (temp9 & temp17)
    119         temp33 = (temp32 & temp26)
    120         temp34 = (temp31 | temp33)
    121         temp35 = (temp32 & temp29)
    122         temp36 = (temp34 | temp35)
    123         temp37 = (basis_bits.bit_5 &~ basis_bits.bit_4)
    124         temp38 = (temp37 & temp7)
    125         temp39 = (temp3 & temp38)
    126         temp40 = (temp36 | temp39)
    127         temp41 = (temp12 & temp25)
    128         temp42 = (temp3 & temp41)
    129         lex.Delimiter = (temp40 | temp42)
    130         lex.Percent = (temp3 & temp38)
    131         lex.Period = (temp3 & temp22)
    132         lex.LAngle = (temp18 & temp13)
    133         lex.RAngle = (temp18 & temp22)
    134         lex.LBracket = (temp11 & temp26)
    135         lex.RBracket = (temp11 & temp29)
    136         lex.Slash = (temp3 & temp41)
    137         temp43 = (basis_bits.bit_2 | basis_bits.bit_3)
    138         temp44 = (temp1 | temp43)
    139         temp45 = (temp4 & temp21)
    140         temp46 = (temp29 | temp45)
    141         lex.EOL = (temp46 &~ temp44)
    142         temp47 = (basis_bits.bit_4 | basis_bits.bit_5)
    143         temp48 = (temp47 | temp5)
    144         temp49 = (temp44 | temp48)
    145         temp50 = (temp13 &~ temp44)
    146         temp51 = (temp49 &~ temp50)
    147         temp52 = (temp29 &~ temp44)
    148         temp53 = (temp51 &~ temp52)
    149         temp54 = (temp45 &~ temp44)
    150         temp55 = (temp53 &~ temp54)
    151         temp56 = (temp8 &~ temp44)
    152         temp57 = (temp55 &~ temp56)
    153         temp58 = (temp3 &~ temp48)
    154         temp59 = (temp57 &~ temp58)
    155         lex.WS = (~temp59)
    156         temp60 = (basis_bits.bit_5 | basis_bits.bit_6)
    157         temp61 = (basis_bits.bit_4 & temp60)
    158         lex.Digit = (temp18 &~ temp61)
    159         temp62 = (temp29 | temp26)
    160         lex.Sign = (temp3 & temp62)
    161         temp63 = (temp9 &~ temp43)
    162         temp64 = (temp63 &~ basis_bits.bit_4)
    163         temp65 = (~temp25)
    164         temp66 = ((basis_bits.bit_5 & temp65)|(~(basis_bits.bit_5) & temp5))
    165         temp67 = (temp64 & temp66)
    166         temp68 = (lex.Digit | temp67)
    167         temp69 = (temp9 & temp2)
    168         temp70 = (temp69 &~ basis_bits.bit_4)
    169         temp71 = (temp70 & temp66)
    170         lex.Hex = (temp68 | temp71)
    171         lex.Regular = ~lex.Delimiter&~lex.WS
     92        temp1 = (basis_bits.bit_0 | basis_bits.bit_1)
     93        temp2 = (basis_bits.bit_2 &~ basis_bits.bit_3)
     94        temp3 = (temp2 &~ temp1)
     95        temp4 = (basis_bits.bit_4 &~ basis_bits.bit_5)
     96        temp5 = (basis_bits.bit_6 | basis_bits.bit_7)
     97        temp6 = (temp4 &~ temp5)
     98        lex.LParen = (temp3 & temp6)
     99        temp7 = (basis_bits.bit_7 &~ basis_bits.bit_6)
     100        temp8 = (temp4 & temp7)
     101        lex.RParen = (temp3 & temp8)
     102        temp9 = (basis_bits.bit_1 &~ basis_bits.bit_0)
     103        temp10 = (basis_bits.bit_3 &~ basis_bits.bit_2)
     104        temp11 = (temp9 & temp10)
     105        temp12 = (basis_bits.bit_4 & basis_bits.bit_5)
     106        temp13 = (temp12 &~ temp5)
     107        lex.Backslash = (temp11 & temp13)
     108        temp14 = (temp5 &~ temp7)
     109        temp15 = (temp4 &~ temp14)
     110        temp16 = (temp3 & temp15)
     111        temp17 = (basis_bits.bit_2 & basis_bits.bit_3)
     112        temp18 = (temp17 &~ temp1)
     113        temp19 = (temp18 & temp13)
     114        temp20 = (temp16 | temp19)
     115        temp21 = (basis_bits.bit_6 &~ basis_bits.bit_7)
     116        temp22 = (temp12 & temp21)
     117        temp23 = (temp18 & temp22)
     118        temp24 = (temp20 | temp23)
     119        temp25 = (basis_bits.bit_6 & basis_bits.bit_7)
     120        temp26 = (temp4 & temp25)
     121        temp27 = (temp11 & temp26)
     122        temp28 = (temp24 | temp27)
     123        temp29 = (temp12 & temp7)
     124        temp30 = (temp11 & temp29)
     125        temp31 = (temp28 | temp30)
     126        temp32 = (temp9 & temp17)
     127        temp33 = (temp32 & temp26)
     128        temp34 = (temp31 | temp33)
     129        temp35 = (temp32 & temp29)
     130        temp36 = (temp34 | temp35)
     131        temp37 = (basis_bits.bit_5 &~ basis_bits.bit_4)
     132        temp38 = (temp37 & temp7)
     133        temp39 = (temp3 & temp38)
     134        temp40 = (temp36 | temp39)
     135        temp41 = (temp12 & temp25)
     136        temp42 = (temp3 & temp41)
     137        lex.Special = (temp40 | temp42)
     138        lex.Percent = (temp3 & temp38)
     139        lex.Period = (temp3 & temp22)
     140        lex.LAngle = (temp18 & temp13)
     141        lex.RAngle = (temp18 & temp22)
     142        lex.LBracket = (temp11 & temp26)
     143        lex.RBracket = (temp11 & temp29)
     144        lex.Slash = (temp3 & temp41)
     145        temp43 = (basis_bits.bit_2 | basis_bits.bit_3)
     146        temp44 = (temp1 | temp43)
     147        temp45 = (temp4 & temp21)
     148        temp46 = (temp29 | temp45)
     149        lex.EOL = (temp46 &~ temp44)
     150        temp47 = (basis_bits.bit_4 | basis_bits.bit_5)
     151        temp48 = (temp47 | temp5)
     152        temp49 = (temp44 | temp48)
     153        temp50 = (temp13 &~ temp44)
     154        temp51 = (temp49 &~ temp50)
     155        temp52 = (temp29 &~ temp44)
     156        temp53 = (temp51 &~ temp52)
     157        temp54 = (temp45 &~ temp44)
     158        temp55 = (temp53 &~ temp54)
     159        temp56 = (temp8 &~ temp44)
     160        temp57 = (temp55 &~ temp56)
     161        temp58 = (temp3 &~ temp48)
     162        temp59 = (temp57 &~ temp58)
     163        lex.WS = (~temp59)
     164        temp60 = (basis_bits.bit_5 | basis_bits.bit_6)
     165        temp61 = (basis_bits.bit_4 & temp60)
     166        lex.Digit = (temp18 &~ temp61)
     167        temp62 = (temp29 | temp26)
     168        lex.Sign = (temp3 & temp62)
     169        temp63 = (temp9 &~ temp43)
     170        temp64 = (temp63 &~ basis_bits.bit_4)
     171        temp65 = (~temp25)
     172        temp66 = ((basis_bits.bit_5 & temp65)|(~(basis_bits.bit_5) & temp5))
     173        temp67 = (temp64 & temp66)
     174        temp68 = (lex.Digit | temp67)
     175        temp69 = (temp9 & temp2)
     176        temp70 = (temp69 &~ basis_bits.bit_4)
     177        temp71 = (temp70 & temp66)
     178        lex.Hex = (temp68 | temp71)
     179        temp72 = (temp25 &~ temp47)
     180        lex.Hash = (temp3 & temp72)
     181        lex.CR = (temp29 &~ temp44)
     182        lex.LF = (temp45 &~ temp44)
     183        lex.Regular = ~lex.Special&~lex.WS
    172184
    173185
     
    185197        even_final = pablo.ScanThru(even_start, lex.Backslash)
    186198        escape = even_final & odd
    187    
     199        escape_char = even & pablo.SpanUpTo(even_start, even_final)
     200       
    188201        odd_start = start & odd
    189202        odd_final = pablo.ScanThru(odd_start, lex.Backslash)
    190203        escape = escape | (odd_final & even)
    191                    
     204        escape_char |= odd & pablo.SpanUpTo(odd_start, odd_final)
     205       
     206        escaped_Callouts.escapes = escape_char
    192207        escaped_Callouts.UELParen = lex.LParen &~ escape
    193208        escaped_Callouts.UERParen = lex.RParen &~ escape
     
    239254        comment_starts=0
    240255        comment_ends=0
    241         scan_characters = escaped_Callouts.UELParen |escaped_Callouts.UERParen | lex.Percent
    242         literalStrings_Callouts.starts = 0
    243         literalStrings_Callouts.ends = 0
    244         literalStrings_Callouts.error = 0
     256        scan_characters = escaped_Callouts.UELParen | escaped_Callouts.UERParen | lex.Percent
    245257        cursor = pablo.ScanToFirst(scan_characters)
    246258        while pablo.inFile(cursor) :
     
    252264                        comment_ends |=comment_cursor
    253265                        cursor = pablo.ScanTo(pablo.Advance(comment_cursor), scan_characters)
    254    
    255 
    256                
     266               
    257267                if string_cursor :
    258268                        if (string_cursor & escaped_Callouts.UELParen) :
     
    270280                                        literalStrings_Callouts.ends|=string_cursor
    271281                                        cursor = pablo.ScanTo(pablo.Advance(string_cursor), scan_characters)
    272                                 if lt_zero():
     282                                elif lt_zero():
    273283                                        literalStrings_Callouts.error|=string_cursor
    274284                                        cursor = pablo.ScanTo(pablo.Advance(string_cursor), scan_characters)
    275                                 if ~(is_zero() | lt_zero()):
     285                                else:
    276286                                        cursor = pablo.ScanTo(pablo.Advance(string_cursor), escaped_Callouts.UELParen | escaped_Callouts.UERParen)
    277                                 #literalStrings_Callouts.ends |= string_cursor & is_zero()     
    278                                 #literalStrings_Callouts.error |= string_cursor & lt_zero()
    279                                 #cursor = pablo.ScanTo(pablo.Advance(string_cursor), scan_characters ^ (lex.Percent & (is_zero() | lt_zero())))
    280                                                                        
    281                
    282                
    283         #if (depth>0):
    284                 #error
     287                                       
     288
    285289        comments_Callouts.mask = pablo.SpanUpTo(comment_starts, comment_ends)
    286         literalStrings_Callouts.mask = pablo.SpanUpTo(literalStrings_Callouts.starts,literalStrings_Callouts.ends)
     290        literalStrings_Callouts.mask = pablo.InclusiveSpan(literalStrings_Callouts.starts,literalStrings_Callouts.ends)
     291        literalStrings_Callouts.escapes = escaped_Callouts.escapes & literalStrings_Callouts.mask
     292        literalStrings_Callouts.carriage_returns = lex.CR & literalStrings_Callouts.mask &~ literalStrings_Callouts.escapes
    287293        marker.mask = comments_Callouts.mask | literalStrings_Callouts.mask
    288294
    289 
    290295def Parse_Names(lex, marker, names_Callouts) :
    291         names_Callouts.starts = pablo.Advance(lex.Slash&~marker.mask)
    292         names_Callouts.follows = pablo.ScanThru(names_Callouts.starts, lex.Regular)
    293         marker.mask |=names_Callouts.starts
     296        names_Callouts.starts =lex.Slash&~marker.mask
     297        firstCharacter = pablo.Advance(names_Callouts.starts)
     298        names_Callouts.follows = pablo.ScanThru(firstCharacter, lex.Regular)
     299        names_Callouts.escapes = (pablo.Advance(pablo.Advance(lex.Hash))&pablo.Advance(lex.Hex)&lex.Hex)&pablo.SpanUpTo(names_Callouts.starts, names_Callouts.follows)
     300        marker.mask |=names_Callouts.starts|(firstCharacter&~names_Callouts.follows)
    294301
    295302def Parse_HexStrings(lex, marker, hexStrings_Callouts) :
    296         #Haven't confirmed that this is the correct behaviour with bad input
    297303        hexStrings_Callouts.starts = lex.LAngle &~marker.mask
    298304        hexStrings_Callouts.ends = pablo.ScanThru(pablo.Advance(hexStrings_Callouts.starts),lex.Hex|lex.WS)
    299305        hexStrings_Callouts.error = hexStrings_Callouts.ends &~ lex.RAngle
    300         marker.mask |= pablo.SpanUpTo(hexStrings_Callouts.starts,hexStrings_Callouts.ends)
     306        mask = pablo.InclusiveSpan(hexStrings_Callouts.starts,hexStrings_Callouts.ends)
     307        hexStrings_Callouts.hex = lex.Hex & mask
     308        marker.mask |= mask
    301309
    302310def Parse_Numeric(lex, marker, numeric_Callouts) :
     
    306314        marker.mask |= numeric_Callouts.starts
    307315
    308         # aftersign = pablo.Advance(numeric_Callouts.starts & lex.Sign) | (numeric_Callouts.starts &~ lex.Sign)
    309         # temp = pablo.ScanThru(aftersign, lex.Digit)
    310         # afterperiod = pablo.Advance(temp & lex.Period) | (temp &~ lex.Period)
    311         # numeric_Callouts.follows = pablo.ScanThru(afterperiod, lex.Digit)
    312         # numeric_Callouts.error = numeric_Callouts.follows &~ (lex.WS | lex.Delimiter)
    313         # marker.mask |= numeric_Callouts.starts
    314 
    315316def Parse_Keywords(lex, marker, keywords_Callouts) :
    316317        keywords_Callouts.starts = (lex.Regular &~ pablo.Advance(lex.Regular)) &~ marker.mask
    317318        keywords_Callouts.follows = pablo.ScanThru(keywords_Callouts.starts, lex.Regular)
    318319       
    319 def Parse_Arrays(lex, marker, arrays_Callouts) :
    320         arrays_Callouts.starts =  lex.LBracket &~ marker.mask
    321         arrays_Callouts.ends = lex.RBracket &~ marker.mask
     320def Parse_SpecialChars(lex, marker, specialChars_Callouts) :
     321        specialChars_Callouts.starts =  (lex.Special) &~ marker.mask
     322        specialChars_Callouts.follows = pablo.Advance(specialChars_Callouts.starts)
    322323       
    323324def Main(basis_bits, lex, parity, escaped_Callouts):
     
    330331                Parse_Numeric(lex, marker, numeric_Callouts)
    331332                Parse_Keywords(lex, marker, keywords_Callouts)
    332                 Parse_Arrays(lex, marker, arrays_Callouts)
    333        
     333                Parse_SpecialChars(lex, marker, specialChars_Callouts)
     334       
Note: See TracChangeset for help on using the changeset viewer.