Changeset 2902 for proto/PDF


Ignore:
Timestamp:
Feb 8, 2013, 12:35:48 PM (6 years ago)
Author:
lindanl
Message:

Add numeric processing

Location:
proto/PDF
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • proto/PDF/cb_pablo.py

    r2901 r2902  
    5555
    5656class Out_Callouts():
     57    mask = 0
    5758    zeromask = 0
    5859    delmask = 0
     
    191192        lex.Oct = (temp39 &~ basis_bits.bit_4)
    192193        lex.Nonoct = (temp16 | temp19)
    193         lex.Regular = ~ (lex.Special & lex.WS)
     194        lex.Regular = ~ (lex.Special | lex.WS)
    194195
    195196       
     
    222223
    223224#def Parse_CommentsLiteralStrings(lex, escaped_Callouts, marker, comments_Callouts, literalStrings_Callouts) :
    224         ##not entirely sure this code is correct once compiled
    225         #depth = 0
    226         #comment_starts=0
    227         #comment_ends=0
    228         #marker.starts = 0
    229         #marker.others = 0
    230         #literalStrings_Callouts.starts = 0
    231         #literalStrings_Callouts.ends = 0
    232 
    233         #scan_characters = escaped_Callouts.UELParen | escaped_Callouts.UERParen | lex.Percent
    234         #cursor = pablo.ScanToFirst(scan_characters)
    235         #while pablo.inFile(cursor) :
    236                 #comment_cursor = cursor & lex.Percent
    237                 #string_cursor = cursor & (escaped_Callouts.UELParen|escaped_Callouts.UERParen)
    238                 #if comment_cursor :
    239                         #comment_starts |=comment_cursor
    240                         #comment_cursor = pablo.ScanTo(comment_cursor, lex.EOL)
    241                         #comment_ends |=comment_cursor
    242                         #cursor = pablo.ScanTo(pablo.Advance(comment_cursor), scan_characters)
    243                
    244                 #if string_cursor :
    245                         ##There should be a better way to do this
    246                         #if (string_cursor & escaped_Callouts.UELParen) :
    247                                 #if is_zero():
    248                                         #literalStrings_Callouts.starts|=string_cursor
    249 
    250                                 #inc()
    251                         #if (string_cursor & escaped_Callouts.UELParen) :
    252                                 #cursor = pablo.ScanTo(pablo.Advance(string_cursor), escaped_Callouts.UELParen | escaped_Callouts.UERParen)
    253                         #if (string_cursor & escaped_Callouts.UERParen) :
    254                                 #dec()
    255                         #if (string_cursor & escaped_Callouts.UERParen) :
    256                                 #if is_zero():
    257                                         #literalStrings_Callouts.ends|=string_cursor
    258                                         #cursor = pablo.ScanTo(pablo.Advance(string_cursor), scan_characters)
    259                                 #if lt_zero():
    260                                         #literalStrings_Callouts.error|=string_cursor
    261                                         #cursor = pablo.ScanTo(pablo.Advance(string_cursor), scan_characters)
    262                                 #if ~(is_zero() | lt_zero()):
    263                                         #cursor = pablo.ScanTo(pablo.Advance(string_cursor), escaped_Callouts.UELParen | escaped_Callouts.UERParen)
    264                                        
    265 
    266         #comments_Callouts.mask = pablo.SpanUpTo(comment_starts, comment_ends)
    267         #literalStrings_Callouts.mask = pablo.InclusiveSpan(literalStrings_Callouts.starts,literalStrings_Callouts.ends)
    268         #literalStrings_Callouts.escapes = escaped_Callouts.escapes & literalStrings_Callouts.mask
    269         #literalStrings_Callouts.carriage_returns = lex.CR & literalStrings_Callouts.mask &~ escaped_Callouts.escaped
    270         #marker.mask = comments_Callouts.mask | literalStrings_Callouts.mask
     225       
    271226
    272227       
     
    275230        hexString_ends = pablo.ScanThru(pablo.Advance(hexString_starts),lex.Hex|lex.WS)
    276231        #error = hexString_ends &~ lex.RAngle
    277         out_Callouts.hexString_mask = pablo.ExclusiveSpan(hexString_starts,hexString_ends)
     232        out_Callouts.hexString_mask = pablo.InclusiveSpan(hexString_starts,hexString_ends)
     233        out_Callouts.mask = out_Callouts.hexString_mask
    278234        marker.hex_opener = hexString_starts
    279235
     
    281237        name_starts =lex.Slash #&~marker.mask
    282238        names_follows = pablo.ScanThru(pablo.Advance(name_starts), lex.Regular)
    283         out_Callouts.names_escapes = lex.Hash & pablo.Lookahead(lex.Hex) & pablo.Lookahead(lex.Hex,2)
     239        out_Callouts.names_escapes = lex.Hash & pablo.Lookahead(lex.Hex) & pablo.Lookahead(lex.Hex,2)   
     240        out_Callouts.mask |= pablo.InclusiveSpan(name_starts,names_follows)
    284241        marker.name_starts = name_starts
    285242       
    286243def Parse_Numeric(lex, marker, out_Callouts) :
    287244        numeric_characters = (lex.Digit | lex.Period | lex.Sign)
    288         numeric_starts = (numeric_characters &~ pablo.Advance(lex.Regular)) #&~ marker.mask
     245        numeric_starts = (numeric_characters &~ pablo.Advance(lex.Regular)) &~ out_Callouts.mask
    289246        numeric_follows = pablo.ScanThru(numeric_starts, lex.Regular)
    290247        marker.numeric_starts = numeric_starts 
  • proto/PDF/cb_template.cpp

    r2901 r2902  
    1414#include "../../simd-lib/s2p.hpp"
    1515#include "../../simd-lib/p2s.hpp"
     16#include <math.h>
    1617
    1718#include "../../simd-lib/perflib/perfsec.h"
    18 
     19using namespace std;
     20#include <iostream>
    1921
    2022
     
    3537BitBlock EOF_mask = simd<1>::constant<1>();
    3638
    37 static inline int Name_check(int pos);
    38 static inline int String_check(int pos);
    39 static inline int Hex_check(int pos);
    40 static inline int Digit_check(int pos);
    41 static inline int Keyword_check(int pos);
    42 static inline int Array_check(int pos);
     39
     40static inline int Digit_postprocessing(char * source, int pos);
    4341
    4442@global
     
    4947void do_process(FILE *infile, FILE *outfile, int filesize);
    5048
    51 
     49#define MAX_NUM 1000
     50int numbers[MAX_NUM];
     51int dec_pl[MAX_NUM];
     52int num_idx=0;
     53
     54
     55static inline int Digit_postprocessing(char * source, int pos) {
     56    bool negative= false;
     57    int num = 0;
     58    int start_pos;
     59    if (source[pos] == '-')     {
     60      pos++;
     61      negative = true;
     62    }
     63    else if (source[pos] == '+')
     64      pos++;
     65
     66    while ('0' <= source[pos] && source[pos] <= '9' || source[pos]=='.'){
     67      if(source[pos]=='.'){
     68        pos++;
     69        start_pos = pos;
     70        continue;
     71      }
     72      num = num * 10 + source[pos] - '0';
     73      pos++;
     74    }
     75    if (negative) (num) = -(num);
     76    numbers[num_idx] = num;
     77    dec_pl[num_idx] = pow(10, pos - start_pos);
     78    num_idx++;
     79}
    5280
    5381int main(int argc, char * argv[]) {
     
    214242}
    215243
     244static inline void Postprocessing(char* src, Marker marker){   
     245 
     246    if(bitblock::any(marker.numeric_starts)){
     247      BitBlockForwardIterator iter;
     248      iter.init(&(marker.numeric_starts));
     249      BitBlockForwardIterator iter_end;
     250      while(iter != iter_end) {
     251          Digit_postprocessing(src, *iter);
     252          iter++;
     253      }
     254    }
     255}
     256
    216257void do_process(FILE *infile, FILE *outfile, int filesize) {
    217258 
     
    258299      parse_HexStrings.do_block(lex[i], marker, out_Callouts);
    259300      parse_Names.do_block(lex[i], marker, out_Callouts, lex[i+1]);
     301      parse_Numeric.do_block(lex[i], marker, out_Callouts);
    260302      prepare_content_buffer.do_block(basis_bits[i], lex[i], marker, parity, escape_Callouts, out_Callouts, lex[i+1]);
    261303      Build_ContentBuffer(out_Callouts, content_buf, &content_buf_ptr);
    262     }
     304      Postprocessing(&srcbuf[i*BLOCK_SIZE], marker);
     305    }
     306   
    263307    /*final block*/
    264308    EOF_mask = bitblock::srl(simd<1>::constant<1>(), convert(BLOCK_SIZE-chars_avail));
     
    266310    parse_HexStrings.do_final_block(lex[BLOCKS-1], marker, out_Callouts, EOF_mask);
    267311    parse_Names.do_final_block(lex[BLOCKS-1], marker, out_Callouts, EOF_mask);
     312    parse_Numeric.do_block(lex[BLOCKS-1], marker, out_Callouts);
    268313    prepare_content_buffer.do_final_block(basis_bits[BLOCKS-1], lex[BLOCKS-1], marker, parity, escape_Callouts, out_Callouts, EOF_mask);
    269314    out_Callouts.delmask |= ~EOF_mask;         
    270315    Build_ContentBuffer(out_Callouts, content_buf, &content_buf_ptr);
    271 /*
    272 
    273     while (chars_avail >= BLOCK_SIZE) {
    274           s2p_do_block((BytePack *) &srcbuf[block_base], basis_bits);
    275           @block_stmts                   
    276           Build_ContentBuffer(out_Callouts, content_buf, &content_buf_ptr);
    277                   block_base += BLOCK_SIZE;
    278           chars_avail -= BLOCK_SIZE;
    279     }
    280 
    281     if (chars_avail > 0 || @any_carry) {
    282           EOF_mask = bitblock::srl(simd<1>::constant<1>(), convert(BLOCK_SIZE-chars_avail));
    283           s2p_do_final_block((BytePack *) &srcbuf[block_base], basis_bits, EOF_mask);
    284           @final_block_stmts
    285           out_Callouts.delmask |= ~EOF_mask;         
    286           Build_ContentBuffer(out_Callouts, content_buf, &content_buf_ptr);
    287     }
    288 */   
     316    Postprocessing(&srcbuf[(BLOCKS-1)*BLOCK_SIZE], marker);
     317
     318   
     319//     for(int i=0;i<num_idx;i++)
     320//       printf("%i,%i\n",numbers[i],dec_pl[i]);
     321 
    289322    PERF_SEC_END(parser_timer, chars_read);
    290323   
Note: See TracChangeset for help on using the changeset viewer.