Public Member Functions | |
const cmt_string | build (const Symbol &symbol, const cmt_string &tag_name="") |
const cmt_string | clean (const Symbol &symbol, const cmt_string &tag_name="") |
|
Implements ValueBuilder. Definition at line 2316 of file cmt_symbol.cxx. References cmt_regexp::iterator::_length, cmt_regexp::iterator::_pos, action_show_macro, ActionType, cmt_regexp::begin(), SymbolValueList::command_type, CommandMacro, CommandMacroAppend, CommandMacroPrepend, CommandMacroRemove, CommandMacroRemoveAll, CommandMacroRemoveAllRegexp, CommandMacroRemoveRegexp, SymbolValueList::discarded, Use::discarded, cmt_regexp::end(), Cmt::get_action(), Cmt::get_current_target(), SymbolValueList::is_reflexive, Symbol::name, SymbolValueList::select_first(), SymbolValueList::show(), cmt_vector< T >::size(), SymbolValue::text, SymbolValueList::use, Symbol::value_is_reflexive(), Symbol::value_lists, and SymbolValueList::values.
02318 { 02319 // Control of recursivity 02320 static int level = 0; 02321 02322 cmt_string temp; 02323 cmt_string previous_temp; 02324 static const cmt_string empty; 02325 bool show_it = false; 02326 02327 ActionType action = Cmt::get_action (); 02328 02329 if (action == action_show_macro) 02330 { 02331 if (symbol.name == Cmt::get_current_target ()) 02332 { 02333 // Should not display on recursive calls 02334 if (level == 0) show_it = m_display_it; 02335 } 02336 } 02337 02338 level++; 02339 02340 temp = ""; 02341 02342 int i; 02343 02344 bool first_definition = true; 02345 bool defined = false; 02346 02347 for (i = 0; i < symbol.value_lists.size (); i++) 02348 { 02349 const SymbolValueList& value_list = symbol.value_lists[i]; 02350 02351 if ((value_list.use != 0) && 02352 (value_list.use->discarded)) continue; 02353 02354 if (value_list.command_type != CommandMacroPrepend) continue; 02355 02356 const int selected = value_list.select_first (tag_name); 02357 02358 if (selected < 0) continue; 02359 02360 SymbolValue& value = value_list.values[selected]; 02361 02362 if (show_it) 02363 { 02364 value_list.show (symbol, value, first_definition); 02365 } 02366 02367 if (value_list.discarded) continue; 02368 02369 previous_temp = temp; 02370 temp = value.text; 02371 temp += previous_temp; 02372 } 02373 02374 previous_temp = temp; 02375 temp = ""; 02376 02377 first_definition = true; 02378 02379 for (i = 0; i < symbol.value_lists.size (); i++) 02380 { 02381 const SymbolValueList& value_list = symbol.value_lists[i]; 02382 02383 if ((value_list.use != 0) && 02384 (value_list.use->discarded)) continue; 02385 02386 if (value_list.command_type != CommandMacro) continue; 02387 02388 const int selected = value_list.select_first (tag_name); 02389 02390 if (selected < 0) continue; 02391 02392 SymbolValue& value = value_list.values[selected]; 02393 02394 if (show_it) 02395 { 02396 value_list.show (symbol, value, first_definition); 02397 } 02398 02399 // WARNING: 02400 // Commented just for a test : should be uncommented after the test 02401 if (value_list.discarded) continue; 02402 02403 if (!value_list.is_reflexive || 02404 !symbol.value_is_reflexive (value.text)) 02405 { 02406 temp = value.text; 02407 02408 if (!defined) 02409 { 02410 defined = true; 02411 } 02412 else 02413 { 02414 /* 02415 if ((!Cmt::get_quiet ()) && 02416 ((action == action_show_macro) || 02417 (action == action_show_set) || 02418 (action == action_show_action) || 02419 (action == action_show_macros) || 02420 (action == action_show_sets) || 02421 (action == action_show_actions))) 02422 { 02423 cerr << "#CMT> Warning: Symbol " << symbol.name << " overridden"; 02424 02425 if (value_list.use != 0) 02426 { 02427 cerr << " in package " << value_list.use->get_package_name (); 02428 } 02429 02430 cerr << endl; 02431 } 02432 */ 02433 } 02434 } 02435 } 02436 02437 previous_temp += temp; 02438 temp = previous_temp; 02439 02440 for (i = 0; i < symbol.value_lists.size (); i++) 02441 { 02442 const SymbolValueList& value_list = symbol.value_lists[i]; 02443 02444 if ((value_list.use != 0) && 02445 (value_list.use->discarded)) continue; 02446 02447 if (value_list.command_type != CommandMacroAppend) continue; 02448 02449 const int selected = value_list.select_first (tag_name); 02450 02451 if (selected < 0) continue; 02452 02453 SymbolValue& value = value_list.values[selected]; 02454 02455 if (show_it) 02456 { 02457 value_list.show (symbol, value, first_definition); 02458 } 02459 02460 if (value_list.discarded) continue; 02461 02462 temp += value.text; 02463 } 02464 02465 for (i = 0; i < symbol.value_lists.size (); i++) 02466 { 02467 const SymbolValueList& value_list = symbol.value_lists[i]; 02468 02469 if ((value_list.use != 0) && 02470 (value_list.use->discarded)) continue; 02471 02472 if ((value_list.command_type != CommandMacroRemove) && 02473 (value_list.command_type != CommandMacroRemoveRegexp) && 02474 (value_list.command_type != CommandMacroRemoveAll) && 02475 (value_list.command_type != CommandMacroRemoveAllRegexp)) continue; 02476 02477 const int selected = value_list.select_first (tag_name); 02478 02479 if (selected < 0) continue; 02480 02481 SymbolValue& value = value_list.values[selected]; 02482 02483 if (show_it) 02484 { 02485 value_list.show (symbol, value, first_definition); 02486 } 02487 02488 if (value_list.discarded) continue; 02489 02490 switch (value_list.command_type) 02491 { 02492 case CommandMacroRemove : 02493 temp.replace (value.text, empty); 02494 break; 02495 case CommandMacroRemoveRegexp : 02496 if (value.text != "") 02497 { 02498 cmt_regexp e (value.text); 02499 cmt_regexp::iterator it; 02500 02501 it = e.begin (temp); 02502 if (it != e.end ()) 02503 { 02504 temp.erase (it._pos, it._length); 02505 } 02506 } 02507 break; 02508 case CommandMacroRemoveAll : 02509 temp.replace_all (value.text, empty); 02510 break; 02511 case CommandMacroRemoveAllRegexp : 02512 if (value.text != "") 02513 { 02514 cmt_regexp e (value.text); 02515 cmt_regexp::iterator it; 02516 02517 for (;;) 02518 { 02519 it = e.begin (temp); 02520 if (it != e.end ()) 02521 { 02522 temp.erase (it._pos, it._length); 02523 } 02524 else 02525 { 02526 break; 02527 } 02528 } 02529 } 02530 break; 02531 } 02532 } 02533 02534 level--; 02535 02536 return (temp); 02537 } |
|
Implements ValueBuilder. Definition at line 49 of file cmt_symbol.cxx.
00051 { 00052 static const cmt_string empty = ""; 00053 return (empty); 00054 } |