Show
Ignore:
Timestamp:
11/03/08 21:44:48 (2 months ago)
Author:
karpet
Message:

first pass at the dom-specific property and metaname feature.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libswish3/trunk/src/libswish3/parser.c

    r2187 r2188  
    684684{ 
    685685    swish_ParserData *parser_data; 
     686    xmlChar *baked; 
     687     
    686688    parser_data = (swish_ParserData *)data; 
    687689     
     
    705707        push_tag_stack(parser_data->domstack, (xmlChar *)tag, parser_data->tag, SWISH_DOT); 
    706708    } 
    707  
     709     
    708710/* 
    709711* set property if this tag is configured for it  
    710712*/ 
    711     if (swish_hash_exists(parser_data->s3->config->properties, parser_data->tag)) { 
     713    if (swish_hash_exists(parser_data->s3->config->properties, parser_data->tag) 
     714        || 
     715        swish_hash_exists(parser_data->s3->config->properties, parser_data->domstack->head->context) 
     716    ) { 
    712717        if (SWISH_DEBUG & SWISH_DEBUG_PARSER) 
    713718            SWISH_DEBUG_MSG(" %s = new property", parser_data->tag); 
     
    715720        add_stack_to_prop_buf(NULL, parser_data);       /* NULL means all properties in the stack are added */ 
    716721        xmlBufferEmpty(parser_data->prop_buf); 
    717  
    718         push_tag_stack(parser_data->propstack, (xmlChar *)tag, parser_data->tag, SWISH_SPACE); 
     722         
     723        if (swish_hash_exists(parser_data->s3->config->properties, parser_data->domstack->head->context)) 
     724            baked = parser_data->domstack->head->context; 
     725        else 
     726            baked = parser_data->tag; 
     727 
     728        push_tag_stack(parser_data->propstack, (xmlChar *)tag, baked, SWISH_SPACE); 
    719729 
    720730        if (SWISH_DEBUG & SWISH_DEBUG_PARSER) 
     
    725735* likewise for metastack  
    726736*/ 
    727     if (swish_hash_exists(parser_data->s3->config->metanames, parser_data->tag)) { 
     737    if (swish_hash_exists(parser_data->s3->config->metanames, parser_data->tag) 
     738        || 
     739        swish_hash_exists(parser_data->s3->config->metanames, parser_data->domstack->head->context) 
     740    ) { 
    728741        if (SWISH_DEBUG & SWISH_DEBUG_PARSER) 
    729742            SWISH_DEBUG_MSG(" %s = new metaname", parser_data->tag); 
     
    731744        flush_buffer(parser_data, parser_data->metastack->head->baked, 
    732745                     parser_data->metastack->head->context); 
    733  
    734         push_tag_stack(parser_data->metastack, (xmlChar *)tag, parser_data->tag, SWISH_SPACE); 
     746                      
     747        if (swish_hash_exists(parser_data->s3->config->properties, parser_data->domstack->head->context)) 
     748            baked = parser_data->domstack->head->context; 
     749        else 
     750            baked = parser_data->tag; 
     751 
     752        push_tag_stack(parser_data->metastack, (xmlChar *)tag, baked, SWISH_SPACE); 
    735753    } 
    736754 
     
    10831101    ptr->domstack->temp  = NULL; 
    10841102    ptr->domstack->count = 0; 
    1085     push_tag_stack(ptr->domstack, (xmlChar *)".", (xmlChar *)".", SWISH_DOT); 
    1086  
    1087 /* 
    1088 * no such property just to seed stack  
    1089 */ 
    10901103 
    10911104/* 
     
    21552168        tmp = swish_xmalloc(size); 
    21562169                 
    2157         if (snprintf((char *)tmp, size, "%s%c%s", (char *)flat, flatten_join, (char *)stack->temp->baked) 
    2158             > 0) { 
     2170        if (snprintf((char *)tmp, size, "%s%c%s", 
     2171             (char *)stack->temp->baked, flatten_join, (char *)flat) 
     2172            > 0 
     2173        ) { 
    21592174            if (flat != NULL) 
    21602175                swish_xfree(flat); 
     
    21782193{ 
    21792194    swish_TagStack *stack; 
    2180     int cleanwsp; 
     2195    boolean cleanwsp; 
    21812196    swish_Property *prop; 
    21822197