ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/trunk/VTBFileUtil2/IndividualClient.cxx
Revision: 273
Committed: 2003-08-20T23:29:24-07:00 (21 years, 10 months ago) by douglas
File size: 2945 byte(s)
Log Message:
Did stuff.

File Contents

# Content
1 // Vance Thrift and Biller File Utility 2
2 //
3 // Douglas Thrift
4 //
5 // $Id: IndividualClient.cxx,v 1.6 2003/08/21 06:29:24 douglas Exp $
6
7 #include "IndividualClient.h"
8
9 unsigned IndividualClient::getNumber(void)
10 {
11 if (number == 0)
12 {
13 demunge();
14 }
15
16 return number;
17 }
18
19 string IndividualClient::getName(void)
20 {
21 if (name == "")
22 {
23 demunge();
24 }
25
26 return name;
27 }
28
29 string IndividualClient::getFile(void)
30 {
31 if (file == "")
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)
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() > 2 && word.find("o\'") == 0)
136 {
137 capitalize(word, 2);
138 }
139 else if (word.length() > 1)
140 {
141 if (!isalpha(word[0]))
142 {
143 capitalize(word, 1);
144 }
145 }
146
147 capitalize(word);
148
149 switch (++count)
150 {
151 case 1:
152 name << word << " ";
153 break;
154 case 2:
155 name << word;
156 break;
157 case 3:
158 name << ", " << word;
159 break;
160 default:
161 name << " " << word;
162 break;
163 }
164 }
165 while (file.good());
166
167 this->name = name.str();
168 }
169
170 string IndividualClient::demunge(const string& munged)
171 {
172 string demunged;
173
174 for (unsigned index = 0; index < munged.length() - extension.length() - 1;
175 index++)
176 {
177 if (munged[index] == '_')
178 {
179 demunged += ' ';
180 }
181 else
182 {
183 demunged += munged[index];
184 }
185 }
186
187 return demunged;
188 }
189
190 void IndividualClient::capitalize(string& word, unsigned index, unsigned count)
191 {
192 for (unsigned number = index; number < index + count; number++)
193 {
194 word[number] = toupper(word[number]);
195 }
196 }