ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/trunk/VTBFileUtil2/IndividualClient.cxx
Revision: 277
Committed: 2003-08-24T00:31:45-07:00 (21 years, 10 months ago) by douglas
File size: 3148 byte(s)
Log Message:
Did work.

File Contents

# User Rev Content
1 douglas 260 // Vance Thrift and Biller File Utility 2
2     //
3     // Douglas Thrift
4     //
5 douglas 277 // $Id: IndividualClient.cxx,v 1.8 2003/08/24 07:31:45 douglas Exp $
6 douglas 260
7     #include "IndividualClient.h"
8 douglas 265
9     unsigned IndividualClient::getNumber(void)
10     {
11 douglas 277 if (number == 0 && file != "")
12 douglas 265 {
13     demunge();
14     }
15    
16     return number;
17     }
18    
19     string IndividualClient::getName(void)
20     {
21 douglas 277 if (name == "" && file != "")
22 douglas 265 {
23     demunge();
24     }
25    
26     return name;
27     }
28    
29     string IndividualClient::getFile(void)
30     {
31 douglas 277 if (file == "" && number != 0 && name != "")
32 douglas 265 {
33     ostringstream file;
34    
35 douglas 267 file << number;
36 douglas 265
37 douglas 267 istringstream name(this->name);
38    
39     do
40 douglas 265 {
41 douglas 267 string word;
42    
43     name >> word;
44     name.get();
45    
46     unsigned punk;
47    
48     do
49 douglas 265 {
50 douglas 267 punk = word.find_first_of(",.");
51    
52     if (punk != string::npos) word.erase(punk, 1);
53 douglas 265 }
54 douglas 267 while (punk != string::npos);
55    
56     lowercase(word);
57    
58     file << "_" << word;
59 douglas 265 }
60 douglas 267 while (name.good());
61 douglas 265
62 douglas 271 this->file = file.str() + '.' + extension;
63 douglas 265 }
64    
65     return file;
66     }
67    
68     void IndividualClient::setNumber(unsigned number)
69     {
70     this->number = number;
71     file = "";
72     }
73    
74     void IndividualClient::setName(const string& name)
75     {
76     this->name = name;
77     file = "";
78     }
79    
80     void IndividualClient::setFile(const string& file)
81     {
82     this->file = file;
83     number = 0;
84     name = "";
85     }
86    
87 douglas 271 string IndividualClient::extension = "pdf";
88    
89 douglas 265 void IndividualClient::demunge(void)
90     {
91     istringstream file(demunge(this->file));
92    
93     file >> number;
94     file.get();
95    
96     ostringstream name;
97 douglas 266 unsigned count = 1;
98 douglas 265
99     do
100     {
101     string word;
102    
103     file >> word;
104     file.get();
105    
106 douglas 274 if (word.length() == 1 && word != "i")
107 douglas 265 {
108 douglas 273 if (isalpha(word[0])) word += '.';
109     }
110     else if (word == "jr" || word == "sr" || word == "dr" || word == "mr"
111     || word == "ms" || word == "mrs")
112     {
113 douglas 266 word += '.';
114     }
115     else if (word == "de" && count == 1)
116     {
117     --count;
118     }
119     else if (word == "ii" || word == "iv" || word == "iv")
120     {
121 douglas 274 capitalize(word, 0, 2);
122 douglas 266 }
123     else if (word == "iii")
124     {
125 douglas 274 capitalize(word, 0, 3);
126 douglas 266 }
127     else if (word.length() > 2 && word.find("mc") == 0)
128     {
129 douglas 265 capitalize(word, 2);
130     }
131     else if (word.length() > 3 && word.find("mac") == 0)
132     {
133     capitalize(word, 3);
134     }
135 douglas 277 else if (word.length() > word.find_first_of("\'-") + 1 &&
136     word.find_first_not_of("\'-") != string::npos)
137 douglas 265 {
138 douglas 277 capitalize(word, word.find_first_of("\'-") + 1);
139 douglas 265 }
140 douglas 271 else if (word.length() > 1)
141     {
142     if (!isalpha(word[0]))
143     {
144     capitalize(word, 1);
145     }
146     }
147 douglas 277 else if (word == "lefevre")
148     {
149     capitalize(word, 2);
150     }
151 douglas 265
152     capitalize(word);
153    
154     switch (++count)
155     {
156     case 1:
157 douglas 266 name << word << " ";
158     break;
159     case 2:
160 douglas 265 name << word;
161     break;
162 douglas 266 case 3:
163 douglas 265 name << ", " << word;
164     break;
165     default:
166     name << " " << word;
167     break;
168     }
169     }
170     while (file.good());
171    
172     this->name = name.str();
173     }
174    
175     string IndividualClient::demunge(const string& munged)
176     {
177     string demunged;
178    
179 douglas 271 for (unsigned index = 0; index < munged.length() - extension.length() - 1;
180     index++)
181 douglas 265 {
182     if (munged[index] == '_')
183     {
184     demunged += ' ';
185     }
186     else
187     {
188     demunged += munged[index];
189     }
190     }
191    
192     return demunged;
193     }
194 douglas 266
195     void IndividualClient::capitalize(string& word, unsigned index, unsigned count)
196     {
197     for (unsigned number = index; number < index + count; number++)
198     {
199     word[number] = toupper(word[number]);
200     }
201     }