#include <cmt_pattern.h>
Collaboration diagram for ApplyPattern:

Public Types | |
| typedef cmt_vector<ApplyPattern> | ApplyPatternVector |
Public Methods | |
| ApplyPattern () | |
| ~ApplyPattern () | |
| void | show () const |
| void | apply_globals () const |
| void | apply () const |
Public Attributes | |
| cmt_string | name |
| Use* | use |
| cmt_vector<Template> | replacements |
Static Public Methods | |
| void | action (const CmtSystem::cmt_string_vector& words, Use* use) |
| ApplyPattern* | add (const cmt_string& name, Use* use) |
|
|
Definition at line 66 of file cmt_pattern.h. |
|
|
Definition at line 588 of file cmt_pattern.cxx. 00589 {
00590 }
|
|
|
Definition at line 593 of file cmt_pattern.cxx. 00594 {
00595 }
|
|
|
Definition at line 532 of file cmt_pattern.cxx. Referenced by Cmt::select(). 00533 {
00534 //
00535 // Expected syntax is
00536 //
00537 // apply_pattern <pattern-name> [ <template>=<value> ... ]
00538 //
00539
00540 if (words.size () < 2) return;
00541
00542 if (use == 0) use = &(Use::current());
00543
00544 cmt_string& name = words[1];
00545
00546 ApplyPattern* apply_pattern = add (name, use);
00547
00548 for (int i = 2; i < words.size (); i++)
00549 {
00550 cmt_string s = words[i];
00551 int pos = s.find ("=");
00552 if (pos == cmt_string::npos) break;
00553 if (pos == 0) break;
00554
00555 Template& t = apply_pattern->replacements.add ();
00556
00557 s.substr (0, pos, t.name);
00558 s.substr (pos + 1, t.value);
00559
00560 int size = t.value.size ();
00561
00562 if (size >= 2)
00563 {
00564 if (((t.value[0] == '"') && (t.value[size - 1] == '"')) ||
00565 ((t.value[0] == '\'') && (t.value[size - 1] == '\'')))
00566 {
00567 t.value.erase (size - 1);
00568 t.value.erase (0, 1);
00569 }
00570 }
00571 }
00572
00573 apply_pattern->apply ();
00574 }
|
|
|
Definition at line 577 of file cmt_pattern.cxx. Referenced by action(). 00578 {
00579 ApplyPattern& a = use->apply_patterns.add ();
00580
00581 a.name = name;
00582 a.use = use;
00583
00584 return (&a);
00585 }
|
|
|
Definition at line 618 of file cmt_pattern.cxx. Referenced by action(). 00619 {
00620 cmt_string line;
00621
00622 if (CmtSystem::testenv ("CMTTESTPATTERN"))
00623 {
00624 cout << "ApplyPattern::apply> " << name << endl;
00625 }
00626
00627 line = "";
00628 Pattern* p = Pattern::find (name);
00629 if (p == 0)
00630 {
00631 if (CmtSystem::testenv ("CMTTESTPATTERN"))
00632 {
00633 cout << "ApplyPattern::apply> " << name << " not found" << endl;
00634 }
00635
00636 return;
00637 }
00638
00639 if (p->global) return;
00640
00641 Use* u = use;
00642 if (u == 0) u = &(Use::current ());
00643
00644 p->apply (u, replacements);
00645 }
|
|
|
|
|
|
Definition at line 598 of file cmt_pattern.cxx. Referenced by Pattern::show(), Pattern::show_all(), and Pattern::show_all_applied_patterns(). 00599 {
00600 cmt_string line;
00601
00602 line = "";
00603 Pattern* p = Pattern::find (name);
00604 if (p == 0) return;
00605
00606 Use* u = use;
00607 if (u == 0) u = &(Use::current ());
00608
00609 p->expand (u, replacements, line);
00610
00611 if (line != "")
00612 {
00613 cout << "[" << line << "]" << endl;
00614 }
00615 }
|
|
|
Definition at line 81 of file cmt_pattern.h. |
|
|
Definition at line 83 of file cmt_pattern.h. |
|
|
Definition at line 82 of file cmt_pattern.h. |
1.2.3 written by Dimitri van Heesch,
© 1997-2000