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

# Content
1 // Vance Thrift and Biller File Utility 2
2 //
3 // Douglas Thrift
4 //
5 // $Id: IndividualClient.cxx,v 1.8 2003/08/24 07:31:45 douglas Exp $
6
7 #include "IndividualClient.h"
8
9 unsigned IndividualClient::getNumber(void)
10 {
11 if (number == 0 && file != "")
12 {
13 demunge();
14 }
15
16 return number;
17 }
18
19 string IndividualClient::getName(void)
20 {
21 if (name == "" && file != "")
22 {
23 demunge();
24 }
25
26 return name;
27 }
28
29 string IndividualClient::getFile(void)
30 {
31 if (file == "" && number != 0 && name != "")
32 {
33 ostringstream file;
34
35 file << number;
36
37 istringstream name(this->name);
38
39 do
40 {
41 string word;
42
43 name >> word;
44 name.get();
45
46 unsigned punk;
47
48 do
49 {
50 punk = word.find_first_of(",.");
51
52 if (punk != string::npos) word.erase(punk, 1);
53 }
54 while (punk != string::npos);
55
56 lowercase(word);
57
58 file << "_" << word;
59 }
60 while (name.good());
61
62 this->file = file.str() + '.' + extension;
63 }
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 string IndividualClient::extension = "pdf";
88
89 void IndividualClient::demunge(void)
90 {
91 istringstream file(demunge(this->file));
92
93 file >> number;
94 file.get();
95
96 ostringstream name;
97 unsigned count = 1;
98
99 do
100 {
101 string word;
102
103 file >> word;
104 file.get();
105
106 if (word.length() == 1 && word != "i")
107 {
108 if (isalpha(word[0])) word += '.';
109 }
110 else if (word == "jr" || word == "sr" || word == "dr" || word == "mr"
111 || word == "ms" || word == "mrs")
112 {
113 word += '.';
114 }
115 else if (word == "de" && count == 1)
116 {
117 --count;
118 }
119 else if (word == "ii" || word == "iv" || word == "iv")
120 {
121 capitalize(word, 0, 2);
122 }
123 else if (word == "iii")
124 {
125 capitalize(word, 0, 3);
126 }
127 else if (word.length() > 2 && word.find("mc") == 0)
128 {
129 capitalize(word, 2);
130 }
131 else if (word.length() > 3 && word.find("mac") == 0)
132 {
133 capitalize(word, 3);
134 }
135 else if (word.length() > word.find_first_of("\'-") + 1 &&
136 word.find_first_not_of("\'-") != string::npos)
137 {
138 capitalize(word, word.find_first_of("\'-") + 1);
139 }
140 else if (word.length() > 1)
141 {
142 if (!isalpha(word[0]))
143 {
144 capitalize(word, 1);
145 }
146 }
147 else if (word == "lefevre")
148 {
149 capitalize(word, 2);
150 }
151
152 capitalize(word);
153
154 switch (++count)
155 {
156 case 1:
157 name << word << " ";
158 break;
159 case 2:
160 name << word;
161 break;
162 case 3:
163 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 for (unsigned index = 0; index < munged.length() - extension.length() - 1;
180 index++)
181 {
182 if (munged[index] == '_')
183 {
184 demunged += ' ';
185 }
186 else
187 {
188 demunged += munged[index];
189 }
190 }
191
192 return demunged;
193 }
194
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 }