Changeset 30 for tags/parabix-0.39/src


Ignore:
Timestamp:
Jan 26, 2008, 8:13:48 PM (12 years ago)
Author:
cameron
Message:

Unify DQuote/SQuote stream; xmlns bugfix

Location:
tags/parabix-0.39/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • tags/parabix-0.39/src/bitlex.c

    r15 r30  
    6464  BitBlock Equals = simd_and(temp8, temp20);
    6565  BitBlock temp22 = simd_and(temp4, temp10);
    66   LexItem[SQuote] = simd_and(temp3, temp22);
     66  BitBlock SQuote = simd_and(temp3, temp22);
    6767  BitBlock temp23 = simd_or(bit[4], bit[5]);
    6868  BitBlock temp24 = simd_andc(temp5, temp23);
    69   LexItem[DQuote] = simd_and(temp3, temp24);
     69  BitBlock DQuote = simd_and(temp3, temp24);
    7070  BitBlock temp25 = simd_or(temp1, bit[2]);
    7171  BitBlock Control = simd_andc(simd_const_1(1), temp25);
     
    8484  BitBlock Slash = simd_and(temp3, temp21);
    8585  BitBlock AttScan = simd_or(LAngle, RefStart);
    86   LexItem[SQuote] = simd_or(LexItem[SQuote], AttScan);
    87   LexItem[DQuote] = simd_or(LexItem[DQuote], AttScan);
     86  LexItem[Quote] = simd_or(simd_or(DQuote, SQuote), AttScan);
    8887
    8988  /* Mark potential occurrences of ']]>'  These are all actual
  • tags/parabix-0.39/src/bitlex.h

    r15 r30  
    4848  minLexicalItem = 0,
    4949  MarkupStart = minLexicalItem, CD_End_check, Hyphen, QMark,
    50   DQuote, SQuote, NonWS, NameFollow,
     50  Quote, NonWS, NameFollow,
    5151  maxLexicalItem = NameFollow};
    5252
  • tags/parabix-0.39/src/bytelex.h

    r27 r30  
    1717}
    1818
     19template<CodeUnit_Base C>
     20inline bool AtQuote(unsigned char x8data[]) {
     21  return (x8data[0] == Ord<C, '"'>::value) | (x8data[0] == Ord<C, '\''>::value);
     22}
     23
    1924// Whitespace recognition.  This varies between XML 1.0 and
    2025// XML 1.1, but only the XML 1.0 version is needed.
     
    3944}
    4045
    41 
    42 
    4346template<CodeUnit_Base C>
    4447inline bool at_EndTag_Start(unsigned char x8data[]) {
     
    8386
    8487template<CodeUnit_Base C>
    85 inline bool at_EqualsDQuote(unsigned char x8data[]) {
    86   return s2int16(x8data) == c2int16<C, '=', '"'>::value;
    87 }
    88 
    89 template<CodeUnit_Base C>
    90 inline bool at_EqualsSQuote(unsigned char x8data[]) {
    91   return s2int16(x8data) == c2int16<C, '=', '\''>::value;
     88inline bool at_EqualsQuote(unsigned char x8data[]) {
     89  uint16_t EQ = s2int16(x8data);
     90  return (EQ == c2int16<C, '=', '"'>::value) | (EQ == c2int16<C, '=', '\''>::value);
    9291}
    9392
  • tags/parabix-0.39/src/engine.c

    r29 r30  
    135135    case Hyphen: while(!AtChar<ASCII,'-'>(cur())) Advance(1); break;
    136136    case QMark: while(!AtChar<ASCII,'?'>(cur())) Advance(1); break;
    137     case DQuote: while(!AtChar<ASCII,'<'>(cur()) && !AtChar<ASCII,'&'>(cur()) && !AtChar<ASCII,'"'>(cur())) Advance(1); break;
    138     case SQuote: while(!AtChar<ASCII,'<'>(cur()) && !AtChar<ASCII,'&'>(cur()) && !AtChar<ASCII,'\''>(cur())) Advance(1); break;
     137    case Quote: while(!AtChar<ASCII,'<'>(cur()) && !AtChar<ASCII,'&'>(cur()) && !AtQuote<ASCII>(cur())) Advance(1); break;
    139138    case NameFollow: while(!at_WhiteSpace<XML_1_0, ASCII>(cur()) && !AtChar<ASCII,';'>(cur()) && !AtChar<ASCII,'/'>(cur()) && !AtChar<ASCII,'>'>(cur())
    140139                      && !AtChar<ASCII,'='>(cur()) && !AtChar<ASCII,'?'>(cur())) Advance(1); break;
     
    316315        int att_val_start;
    317316        int att_name_end, att_val_end;
    318         lexical_item Quote_stream;
     317        unsigned char quoteCh;
    319318        ScanTo(NameFollow);  /* Name delimiter: WS, "/" or ">" */
    320319        ElementName_action(markup_start+1, AbsPos());
     
    344343                        In many cases, the very first test handles 100% of actual
    345344                        attribute-value pairs encountered. */
    346                         if (at_EqualsDQuote<C>(cur())) {
     345                        if (at_EqualsQuote<C>(cur())) {
     346                                quoteCh = cur()[1];
    347347                                Advance(2);
    348                                 att_val_start = AbsPos();
    349                                 Quote_stream = DQuote;
    350                         }
    351                         else if (at_EqualsSQuote<C>(cur())) {
    352                                 Advance(2);
    353                                 att_val_start = AbsPos();
    354                                 Quote_stream = SQuote;
    355348                        }
    356349                        else {
     
    361354                                }
    362355                                ScanTo(NonWS);
    363                                 att_val_start = AbsPos()+1;
    364                                 if (AtChar<C,'"'>(cur())) {
    365                                         Advance(1);
    366                                         Quote_stream = DQuote;
    367                                 }
    368                                 else if (AtChar<C,'\''>(cur())) {
    369                                         Advance(1);
    370                                         Quote_stream = SQuote;
    371                                 }
    372                                 else {
     356                                quoteCh = cur()[0];
     357                                if (!AtQuote<C>(cur())) {
    373358                                        Error_action(markup_start, AbsPos());
    374359                                        break;
    375360                                }
    376                         }
    377                         ScanTo(Quote_stream);
    378                         while (AtChar<C,'&'>(cur())) {
    379                                 Parse_Reference();
    380                                 ScanTo(Quote_stream);
    381                         }
    382                         if (AtChar<C,'<'>(cur())) {
    383                                 Error_action(markup_start, AbsPos());
    384                                 break;
     361                                Advance(1);
     362                        }
     363                        att_val_start = AbsPos();
     364                        ScanTo(Quote);
     365                        while (cur()[0] != quoteCh) {
     366                                if (AtChar<C,'&'>(cur())) {
     367                                        Parse_Reference();
     368                                        ScanTo(Quote);
     369                                }
     370                                else if (AtQuote<C>(cur())) {
     371                                        Advance(1);
     372                                }
     373                                else /* if (AtChar<C,'<'>(cur())) */{
     374                                        Error_action(markup_start, AbsPos());
     375                                        break;
     376                                }
    385377                        }
    386378                        att_val_end = AbsPos();
    387379                        Advance(1);
    388                         if (at_xmlns<C>(cur())) {
     380                        if (at_xmlns<C>(cur()+att_name_start-AbsPos())) {
    389381                                Namespace_action(att_name_start, att_name_end,
    390382                                                 att_val_start, att_val_end);
     
    532524      ASCII_ScanTo(NonWS);
    533525      xml_info.encoding_start_pos = AbsPos()+1;
    534       if (AtChar<C,'"'>(cur())) {
     526      if (AtQuote<C>(cur())) {
     527        unsigned char quoteCh = cur()[0];
    535528        Advance(1);
    536         ASCII_ScanTo(DQuote);
    537         if (!AtChar<C,'"'>(cur())) {Error_action(decl_start, AbsPos()); return;}
    538       }
    539       else if (AtChar<C,'\''>(cur())) {
    540         Advance(1);
    541         ASCII_ScanTo(SQuote);
    542         if (!AtChar<C,'\''>(cur())) {Error_action(decl_start, AbsPos()); return;}
     529        ASCII_ScanTo(Quote);
     530        if (cur()[0] != quoteCh) {Error_action(decl_start, AbsPos()); return;}
    543531      }
    544532      else {Error_action(decl_start, AbsPos()); return;}
     
    609597  ASCII_ScanTo(NonWS);
    610598  xml_info.encoding_start_pos = AbsPos()+1;
    611   if (AtChar<C,'"'>(cur())) {
    612       Advance(1);
    613       ASCII_ScanTo(DQuote);
    614       if (!AtChar<C,'"'>(cur())) {Error_action(decl_start, AbsPos()); return;}
    615   }
    616   else if (AtChar<C,'\''>(cur())) {
    617       Advance(1);
    618       ASCII_ScanTo(SQuote);
    619       if (!AtChar<C,'\''>(cur())) {Error_action(decl_start, AbsPos()); return;}
     599  if (AtQuote<C>(cur())) {
     600        unsigned char quoteCh = cur()[0];
     601        Advance(1);
     602        ASCII_ScanTo(Quote);
     603        if (cur()[0] != quoteCh) {Error_action(decl_start, AbsPos()); return;}
    620604  }
    621605  else {Error_action(decl_start, AbsPos()); return;}
Note: See TracChangeset for help on using the changeset viewer.