Changeset 704


Ignore:
Timestamp:
Nov 9, 2010, 12:59:16 PM (8 years ago)
Author:
ksherdy
Message:

Add support for string, number, true, false, null validation.

Location:
proto/JSON
Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • proto/JSON/json_prototype.py

    r703 r704  
    196196
    197197
    198 def validate_true_false_null(Lex, EOF_mask):
     198def validate_true(Starts, Lex):
    199199        r"""
    200200        RFC 4627 - JavaScript Object Notation (JSON) 
    201 
     201       
    202202        true  = %x74.72.75.65      ; true
     203       
     204        """
     205        Errors = 0
     206       
     207        Scope1 = bitutil.Advance(Starts)
     208        Scope2 = bitutil.Advance(Scope1)
     209        Scope3 = bitutil.Advance(Scope2)
     210       
     211        Errors |= Scope1 &~ Lex.r
     212        Errors |= Scope2 &~ Lex.u
     213        Errors |= Scope3 &~ Lex.e
     214       
     215        Follows = bitutil.Advance(Scope3)
     216        Spans = Follows - Starts
     217
     218        return (Errors, Spans)
     219
     220def validate_false(Starts, Lex):
     221        r"""
     222        RFC 4627 - JavaScript Object Notation (JSON) 
     223       
    203224        false = %x66.61.6c.73.65   ; false
     225       
     226        """
     227        Errors = 0
     228       
     229        Scope1 = bitutil.Advance(Starts)
     230        Scope2 = bitutil.Advance(Scope1)
     231        Scope3 = bitutil.Advance(Scope2)
     232        Scope4 = bitutil.Advance(Scope3)
     233       
     234       
     235        Errors |= Scope1 &~ Lex.a
     236        Errors |= Scope2 &~ Lex.l
     237        Errors |= Scope3 &~ Lex.s
     238        Errors |= Scope4 &~ Lex.e
     239
     240        Follows = bitutil.Advance(Scope3)
     241        Spans = Follows - Starts
     242       
     243        return (Errors, Spans)
     244
     245def validate_null(Starts, Lex):
     246        r"""
     247        RFC 4627 - JavaScript Object Notation (JSON) 
     248       
    204249        null  = %x6e.75.6c.6c      ; null
    205250       
    206         global lgth
    207         lgth = len(u8data)
    208251        """
    209252        Errors = 0
    210        
    211         return Errors
    212  
    213 def demo_true_false_null(u8date):
    214         global lgth
    215         lgth = len(u8data)
    216                
    217         (bit, EOF_mask) = bitutil.transpose_streams(u8data)
    218         (u8, Lex, Ctrl) = byteclass.classify_bytes(bit)
    219         Errors = validate_true_false_null(Lex, EOF_mask)
    220        
    221         bitutil.print_aligned_streams([('Input Data', u8data),
    222                               ('Errors', bitutil.bitstream2string(Errors, lgth)),
    223                               ('EOF_Mask', bitutil.bitstream2string(EOF_mask, lgth+1))])       
    224         return
    225  
    226 
    227 def validate_number(NumberStarts, Lex, EOF_mask):
     253
     254        Scope1 = bitutil.Advance(Starts)
     255        Scope2 = bitutil.Advance(Scope1)
     256        Scope3 = bitutil.Advance(Scope2)
     257       
     258        Errors |= Scope1 &~ Lex.u
     259        Errors |= Scope2 &~ Lex.l
     260        Errors |= Scope3 &~ Lex.l
     261       
     262        Follows = bitutil.Advance(Scope3)
     263        Spans = Follows - Starts
     264
     265        return (Errors, Spans)
     266
     267def validate_number(Starts, Lex, EOF_mask):
    228268        r"""   
    229269        RFC 4627 - JavaScript Object Notation (JSON) 
     
    242282        """     
    243283        Errors = 0
    244         M0 = NumberStarts                                       # Initialize marker stream     
     284        M0 = Starts                                     # Initialize marker stream     
    245285       
    246286        M1 = bitutil.ScanThru(M0, Lex.Minus & M0)               # ? Optional character class [-]
     
    277317        Errors = E1 | E5b | E9b | ValueFollowSetErrors # E7a | E10b
    278318       
    279         NumberSpans = M11 - NumberStarts
     319        NumberSpans = M11 - Starts
    280320       
    281321        if debug:
     
    304344                              #('E10b', bitutil.bitstream2string(E10b, lgth)),
    305345                              ('M11', bitutil.bitstream2string(M11, lgth)),
    306                               ('NumberStarts', bitutil.bitstream2string(NumberStarts, lgth)),
     346                              ('Starts', bitutil.bitstream2string(Starts, lgth)),
    307347                              ('NumberSpans', bitutil.bitstream2string(NumberSpans, lgth)),
    308348                              ('Errors', bitutil.bitstream2string(Errors, lgth+1))])           
     
    457497def demo_validate_string(u8data):
    458498        r"""
    459         >>> demo_validate_string('{"\u abcd", "\u1___", "\u12__", "\u123_"}')
    460         Input Data      : {"\u abcd", "\u1___", "\u12__", "\u123_"}
     499        >>> demo_validate_string('["\u abcd", "\u1___", "\u12__", "\u123_"]')
     500        Input Data      : ["\u abcd", "\u1___", "\u12__", "\u123_"]
    461501        EscapeChars     : ___1__________1_________1_________1______
    462502        UnescapedDQuotes: _1_______1__1______1__1______1__1______1_
     
    519559        (StringErrors, StringSpans) = validate_string(StringStarts, Lex, Ctrl, StringMask, EscapeChars, UnescapedDQuotes, lgth)
    520560       
    521         return (ObjectStarts, ArrayStarts, StringStarts, NumberStarts, TrueStarts, FalseStarts, NullStarts, StringErrors, StringSpans)
     561        (NumberErrors, NumberSpans) = validate_number(NumberStarts, Lex, EOF_mask)
     562       
     563        (TrueErrors, TrueSpans) = validate_true(TrueStarts, Lex)
     564       
     565        (FalseErrors, FalseSpans) = validate_false(FalseStarts, Lex)
     566       
     567        (NullErrors, NullSpans) = validate_null(NullStarts, Lex)
     568       
     569        return (ObjectStarts, ArrayStarts,
     570                StringStarts, StringSpans, StringErrors,
     571                NumberStarts, NumberSpans, NumberErrors,
     572                TrueStarts, TrueSpans, TrueErrors,
     573                FalseStarts, FalseSpans, FalseErrors,
     574                NullStarts, NullSpans, NullErrors)
    522575 
    523576def demo_validate_json(u8data):
     
    526579        lgth = len(u8data)
    527580       
    528         (ObjectStarts, ArrayStarts, StringStarts, NumberStarts,TrueStarts, FalseStarts, NullStarts, StringErrors, StringSpans) = validate_json(u8data,lgth)
     581        (ObjectStarts, ArrayStarts,
     582        StringStarts, StringSpans, StringErrors,
     583        NumberStarts, NumberSpans, NumberErrors,
     584        TrueStarts, TrueSpans, TrueErrors,
     585        FalseStarts, FalseSpans, FalseErrors,
     586        NullStarts, NullSpans, NullErrors) = validate_json(u8data,lgth)
    529587
    530588        bitutil.print_aligned_streams([('Input Data', u8data),
     
    532590                              ('ArrayStarts', bitutil.bitstream2string(ArrayStarts, lgth)),
    533591                              ('StringStarts', bitutil.bitstream2string(StringStarts, lgth)),
     592                              ('StringSpans', bitutil.bitstream2string(StringSpans, lgth)),
     593                              ('StringErrors', bitutil.bitstream2string(StringErrors, lgth)),                         
    534594                              ('NumberStarts', bitutil.bitstream2string(NumberStarts, lgth)),
     595                              ('NumberSpans', bitutil.bitstream2string(NumberSpans, lgth)),
     596                              ('NumberErrors', bitutil.bitstream2string(NumberErrors, lgth)),                         
    535597                              ('TrueStarts', bitutil.bitstream2string(TrueStarts, lgth)),
     598                              ('TrueSpans', bitutil.bitstream2string(TrueSpans, lgth)),
     599                              ('TrueErrors', bitutil.bitstream2string(TrueErrors, lgth)),                             
    536600                              ('FalseStarts', bitutil.bitstream2string(FalseStarts, lgth)),
     601                              ('FalseSpans', bitutil.bitstream2string(FalseSpans, lgth)),
     602                              ('FalseErrors', bitutil.bitstream2string(FalseErrors, lgth)),                           
    537603                              ('NullStarts', bitutil.bitstream2string(NullStarts, lgth)),
    538                               ('StringErrors', bitutil.bitstream2string(StringErrors, lgth)),
    539                               ('StringSpans', bitutil.bitstream2string(StringSpans, lgth))])
     604                              ('NullSpans', bitutil.bitstream2string(NullSpans, lgth)),
     605                              ('NullErrors', bitutil.bitstream2string(NullErrors, lgth))])
    540606
    541607        return
     
    554620#       demo_value_starts(u8data)
    555621#       demo_validate_number(u8data)
    556         demo_validate_string(u8data)
    557 #       demo_validate_true_false_null(u8data)
    558 #       demo_validate_json(u8data)
     622#       demo_validate_string(u8data)
     623        demo_validate_json(u8data)
Note: See TracChangeset for help on using the changeset viewer.