Changeset 416

Show
Ignore:
Timestamp:
06/26/10 12:37:34 (3 years ago)
Author:
cameron
Message:

Prevalidation of XML name syntax

Location:
proto/parabix2
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • proto/parabix2/byteclass.py

    r277 r416  
    77# 
    88# Robert D. Cameron 
    9 # August 14, 2009 
    10 # 
     9# June 26, 2010 - Add definitions for lex.ASCII_name_char, 
     10# lex.ASCII_name_start, lex.colon 
     11#  
    1112 
    1213class u8_streams (): 
     
    4647class lexical_streams (): 
    4748  RefStart = 0 
    48   Semicolon = 0 
     49  Semicolon = 0   
     50  Colon = 0 
    4951  LAngle = 0 
    5052  RAngle = 0 
     
    6062  Hash = 0 
    6163  x = 0 
     64  ASCII_name_start = 0 
     65  ASCII_name_char = 0 
    6266  NameScan = 0 
    6367  Digit = 0 
     
    120124  temp28 = (temp9 &~ temp13); 
    121125  lex.x = (temp27 & temp28); 
    122   temp29 = (temp18 & temp23); 
    123   temp30 = (temp29 | lex.Hyphen); 
    124   temp31 = (temp3 & temp15); 
    125   temp32 = (temp30 | temp31); 
     126  temp29 = (temp9 & temp5); 
     127  lex.Colon = (temp8 & temp29); 
     128  temp30 = (temp18 & temp23); 
     129  temp31 = (temp30 | lex.Colon); 
     130  temp32 = (temp16 &~ bit[2]); 
    126131  temp33 = (bit[5] | temp10); 
    127132  temp34 = (bit[4] & temp33); 
    128   temp35 = (temp8 &~ temp34); 
    129   temp36 = (temp32 | temp35); 
    130   temp37 = (temp16 &~ bit[2]); 
    131   temp38 = (~temp34); 
    132   temp39 = (temp21 | temp13); 
    133   temp40 = ((bit[3] & temp38)|(~(bit[3]) & temp39)); 
    134   temp41 = (temp37 & temp40); 
    135   temp42 = (temp36 | temp41); 
    136   temp43 = (temp16 & bit[2]); 
    137   temp44 = (temp43 & temp40); 
    138   temp45 = (temp42 | temp44); 
    139   lex.NameScan = (temp45 | bit[0]); 
    140   temp46 = (temp1 | bit[2]); 
    141   control.x00_x1F = (~temp46); 
    142   temp47 = (bit[2] | bit[3]); 
    143   temp48 = (temp1 | temp47); 
    144   control.CR = (temp20 &~ temp48); 
    145   temp49 = (temp9 & temp5); 
    146   control.LF = (temp49 &~ temp48); 
    147   temp50 = (temp9 & temp19); 
    148   control.HT = (temp50 &~ temp48); 
    149   control.SP = (temp3 &~ temp39); 
    150   temp51 = (temp20 | temp49); 
    151   temp52 = (temp51 | temp50); 
    152   temp53 = (temp52 &~ temp48); 
    153   lex.WS = (temp53 | control.SP); 
    154   temp54 = (bit[5] | bit[6]); 
    155   temp55 = (bit[4] & temp54); 
    156   lex.Digit = (temp8 &~ temp55); 
    157   temp56 = (temp16 &~ temp47); 
    158   temp57 = (temp56 &~ bit[4]); 
    159   temp58 = (~temp10); 
    160   temp59 = ((bit[5] & temp58)|(~(bit[5]) & temp13)); 
    161   temp60 = (temp57 & temp59); 
    162   temp61 = (lex.Digit | temp60); 
    163   temp62 = (temp16 & temp2); 
    164   temp63 = (temp62 &~ bit[4]); 
    165   temp64 = (temp63 & temp59); 
    166   lex.Hex = (temp61 | temp64); 
     133  temp35 = (~temp34); 
     134  temp36 = (temp21 | temp13); 
     135  temp37 = ((bit[3] & temp35)|(~(bit[3]) & temp36)); 
     136  temp38 = (temp32 & temp37); 
     137  temp39 = (temp31 | temp38); 
     138  temp40 = (temp16 & bit[2]); 
     139  temp41 = (temp40 & temp37); 
     140  lex.ASCII_name_start = (temp39 | temp41); 
     141  temp42 = (temp30 | lex.Hyphen); 
     142  temp43 = (temp3 & temp15); 
     143  temp44 = (temp42 | temp43); 
     144  temp45 = (temp8 &~ temp34); 
     145  temp46 = (temp44 | temp45); 
     146  temp47 = (temp46 | temp38); 
     147  lex.ASCII_name_char = (temp47 | temp41); 
     148  lex.NameScan = (lex.ASCII_name_char | bit[0]); 
     149  temp48 = (temp1 | bit[2]); 
     150  control.x00_x1F = (~temp48); 
     151  temp49 = (bit[2] | bit[3]); 
     152  temp50 = (temp1 | temp49); 
     153  control.CR = (temp20 &~ temp50); 
     154  control.LF = (temp29 &~ temp50); 
     155  temp51 = (temp9 & temp19); 
     156  control.HT = (temp51 &~ temp50); 
     157  control.SP = (temp3 &~ temp36); 
     158  temp52 = (temp20 | temp29); 
     159  temp53 = (temp52 | temp51); 
     160  temp54 = (temp53 &~ temp50); 
     161  lex.WS = (temp54 | control.SP); 
     162  temp55 = (bit[5] | bit[6]); 
     163  temp56 = (bit[4] & temp55); 
     164  lex.Digit = (temp8 &~ temp56); 
     165  temp57 = (temp16 &~ temp49); 
     166  temp58 = (temp57 &~ bit[4]); 
     167  temp59 = (~temp10); 
     168  temp60 = ((bit[5] & temp59)|(~(bit[5]) & temp13)); 
     169  temp61 = (temp58 & temp60); 
     170  temp62 = (lex.Digit | temp61); 
     171  temp63 = (temp16 & temp2); 
     172  temp64 = (temp63 &~ bit[4]); 
     173  temp65 = (temp64 & temp60); 
     174  lex.Hex = (temp62 | temp65); 
    167175  u8.unibyte = (~bit[0]); 
    168176  u8.prefix = (bit[0] & bit[1]); 
     
    171179  u8.prefix4 = (u8.prefix & temp7); 
    172180  u8.suffix = (bit[0] &~ bit[1]); 
    173   temp65 = (u8.prefix &~ temp47); 
    174   temp66 = (temp21 | bit[6]); 
    175   temp67 = (temp65 &~ temp66); 
    176   temp68 = (bit[5] & temp13); 
    177   temp69 = (bit[4] | temp68); 
    178   temp70 = (u8.prefix4 & temp69); 
    179   u8.badprefix = (temp67 | temp70); 
    180   u8.xE0 = (u8.prefix3 &~ temp39); 
     181  temp66 = (u8.prefix &~ temp49); 
     182  temp67 = (temp21 | bit[6]); 
     183  temp68 = (temp66 &~ temp67); 
     184  temp69 = (bit[5] & temp13); 
     185  temp70 = (bit[4] | temp69); 
     186  temp71 = (u8.prefix4 & temp70); 
     187  u8.badprefix = (temp68 | temp71); 
     188  u8.xE0 = (u8.prefix3 &~ temp36); 
    181189  u8.xED = (u8.prefix3 & temp20); 
    182   u8.xF0 = (u8.prefix4 &~ temp39); 
    183   temp71 = (temp4 &~ temp13); 
    184   u8.xF4 = (u8.prefix4 & temp71); 
     190  u8.xF0 = (u8.prefix4 &~ temp36); 
     191  temp72 = (temp4 &~ temp13); 
     192  u8.xF4 = (u8.prefix4 & temp72); 
    185193  u8.xA0_xBF = (u8.suffix & bit[2]); 
    186194  u8.x80_x9F = (u8.suffix &~ bit[2]); 
    187   u8.x90_xBF = (u8.suffix & temp47); 
    188   u8.x80_x8F = (u8.suffix &~ temp47); 
     195  u8.x90_xBF = (u8.suffix & temp49); 
     196  u8.x80_x8F = (u8.suffix &~ temp49); 
    189197  u8.xEF = (u8.prefix3 & temp23); 
    190   temp72 = (u8.suffix & temp7); 
    191   u8.xBF = (temp72 & temp23); 
    192   u8.xBE = (temp72 & temp15); 
     198  temp73 = (u8.suffix & temp7); 
     199  u8.xBF = (temp73 & temp23); 
     200  u8.xBE = (temp73 & temp15); 
     201 
    193202  return (u8, control, lex) 
    194203 
  • proto/parabix2/parabix2.py

    r411 r416  
    554554 
    555555 
     556# 
     557# Fully validate ASCII-based names and identify non-ASCII 
     558# positions within names. 
     559 
     560def prevalidate_names(lex, name_stream, nmtoken_stream): 
     561        """Fully validate ASCII-based names and identify non-ASCII positions within names. 
     562 
     563        >>> demo_prevalidate_names("<good -bad='hyphen'/><_OK/><:funny:butOK/><1problem a='b' d423='x'>") 
     564        input data: <good -bad='hyphen'/><_OK/><:funny:butOK/><1problem a='b' d423='x'> 
     565        names     : _1111_1111____________111___111111111111___11111111_1_____1111_____ 
     566        name_check: ______1____________________________________1_______________________ 
     567""" 
     568        name_check = name_stream &~ bitutil.Advance(name_stream) & ~lex.ASCII_name_start 
     569        name_check |= (name_stream | nmtoken_stream) & ~lex.ASCII_name_char 
     570        return name_check 
     571 
     572def demo_prevalidate_names(u8data): 
     573        lgth = len(u8data) 
     574        (bit, EOF_mask) = bitutil.transpose_streams(u8data) 
     575        (u8, control, lex) = byteclass.classify_bytes(bit) 
     576        lex = add_multiliterals(lex) 
     577        markup1 = parse_CtCDPI(lex, EOF_mask) 
     578        callouts = parse_tags(lex, markup1.CtCDPI_mask, EOF_mask) 
     579        name_stream = callouts.ElemNames | callouts.AttNames 
     580        name_check = prevalidate_names(lex, name_stream, 0) 
     581        bitutil.print_aligned_u8_byte_streams([('input data', u8data),  
     582                              ('names', bitutil.bitstream2string(name_stream, lgth)), 
     583                              ('name_check', bitutil.bitstream2string(name_check, lgth))]) 
    556584 
    557585def parabix_parse(u8data):