1*d291ea28SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*d291ea28SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*d291ea28SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*d291ea28SAndrew Rist  * distributed with this work for additional information
6*d291ea28SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*d291ea28SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*d291ea28SAndrew Rist  * "License"); you may not use this file except in compliance
9*d291ea28SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*d291ea28SAndrew Rist  *
11*d291ea28SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*d291ea28SAndrew Rist  *
13*d291ea28SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*d291ea28SAndrew Rist  * software distributed under the License is distributed on an
15*d291ea28SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*d291ea28SAndrew Rist  * KIND, either express or implied.  See the License for the
17*d291ea28SAndrew Rist  * specific language governing permissions and limitations
18*d291ea28SAndrew Rist  * under the License.
19*d291ea28SAndrew Rist  *
20*d291ea28SAndrew Rist  *************************************************************/
21cdf0e10cSrcweir 
22cdf0e10cSrcweir #include <precomp.h>
23cdf0e10cSrcweir #include <adc_msg.hxx>
24cdf0e10cSrcweir 
25cdf0e10cSrcweir 
26cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES
27cdf0e10cSrcweir #include <cosv/file.hxx>
28cdf0e10cSrcweir #include <cosv/tpl/tpltools.hxx>
29cdf0e10cSrcweir 
30cdf0e10cSrcweir 
31cdf0e10cSrcweir namespace autodoc
32cdf0e10cSrcweir {
33cdf0e10cSrcweir 
34cdf0e10cSrcweir 
Messages()35cdf0e10cSrcweir Messages::Messages()
36cdf0e10cSrcweir     :   aMissingDocs(),
37cdf0e10cSrcweir         aParseErrors(),
38cdf0e10cSrcweir         aInvalidConstSymbols(),
39cdf0e10cSrcweir         aUnresolvedLinks(),
40cdf0e10cSrcweir         aTypeVsMemberMisuses()
41cdf0e10cSrcweir {
42cdf0e10cSrcweir }
43cdf0e10cSrcweir 
~Messages()44cdf0e10cSrcweir Messages::~Messages()
45cdf0e10cSrcweir {
46cdf0e10cSrcweir }
47cdf0e10cSrcweir 
48cdf0e10cSrcweir void
WriteFile(const String & i_sOutputFilePath)49cdf0e10cSrcweir Messages::WriteFile(const String & i_sOutputFilePath)
50cdf0e10cSrcweir {
51cdf0e10cSrcweir     csv::File
52cdf0e10cSrcweir         aOut(i_sOutputFilePath, csv::CFM_CREATE);
53cdf0e10cSrcweir     aOut.open();
54cdf0e10cSrcweir 
55cdf0e10cSrcweir     // KORR_FUTURE Enable this when appropriate:
56cdf0e10cSrcweir     WriteParagraph( aOut,
57cdf0e10cSrcweir                     aParseErrors,
58cdf0e10cSrcweir                     "Incompletely Parsed Files",
59cdf0e10cSrcweir                     "Stopped parsing at " );
60cdf0e10cSrcweir 
61cdf0e10cSrcweir     WriteParagraph( aOut,
62cdf0e10cSrcweir                     aMissingDocs,
63cdf0e10cSrcweir                     "Entities Without Documentation",
64cdf0e10cSrcweir                     " in " );
65cdf0e10cSrcweir 
66cdf0e10cSrcweir     WriteParagraph( aOut,
67cdf0e10cSrcweir                     aInvalidConstSymbols,
68cdf0e10cSrcweir                     "Incorrectly Written Const Symbols",
69cdf0e10cSrcweir                     " in " );
70cdf0e10cSrcweir 
71cdf0e10cSrcweir     WriteParagraph( aOut,
72cdf0e10cSrcweir                     aUnresolvedLinks,
73cdf0e10cSrcweir                     "Unresolved Links",
74cdf0e10cSrcweir                     " in\n        " );
75cdf0e10cSrcweir 
76cdf0e10cSrcweir     WriteParagraph( aOut,
77cdf0e10cSrcweir                     aTypeVsMemberMisuses,
78cdf0e10cSrcweir                     "Confusion or Misuse of <Type> vs. <Member>",
79cdf0e10cSrcweir                     " in " );
80cdf0e10cSrcweir     aOut.close();
81cdf0e10cSrcweir }
82cdf0e10cSrcweir 
83cdf0e10cSrcweir void
Out_MissingDoc(const String & i_sEntity,const String & i_sFile,uintt i_nLine)84cdf0e10cSrcweir Messages::Out_MissingDoc(   const String &      i_sEntity,
85cdf0e10cSrcweir                             const String &      i_sFile,
86cdf0e10cSrcweir                             uintt               i_nLine)
87cdf0e10cSrcweir {
88cdf0e10cSrcweir     AddValue( aMissingDocs,
89cdf0e10cSrcweir               i_sEntity,
90cdf0e10cSrcweir               i_sFile,
91cdf0e10cSrcweir               i_nLine );
92cdf0e10cSrcweir }
93cdf0e10cSrcweir 
94cdf0e10cSrcweir void
Out_ParseError(const String & i_sFile,uintt i_nLine)95cdf0e10cSrcweir Messages::Out_ParseError(   const String &      i_sFile,
96cdf0e10cSrcweir                             uintt               i_nLine)
97cdf0e10cSrcweir {
98cdf0e10cSrcweir     aParseErrors[Location(i_sFile,i_nLine)] = String::Null_();
99cdf0e10cSrcweir }
100cdf0e10cSrcweir 
101cdf0e10cSrcweir void
Out_InvalidConstSymbol(const String & i_sText,const String & i_sFile,uintt i_nLine)102cdf0e10cSrcweir Messages::Out_InvalidConstSymbol( const String &      i_sText,
103cdf0e10cSrcweir                                   const String &      i_sFile,
104cdf0e10cSrcweir 								  uintt               i_nLine)
105cdf0e10cSrcweir {
106cdf0e10cSrcweir     AddValue( aInvalidConstSymbols,
107cdf0e10cSrcweir               i_sText,
108cdf0e10cSrcweir               i_sFile,
109cdf0e10cSrcweir               i_nLine );
110cdf0e10cSrcweir }
111cdf0e10cSrcweir 
112cdf0e10cSrcweir void
Out_UnresolvedLink(const String & i_sLinkText,const String & i_sFile,uintt i_nLine)113cdf0e10cSrcweir Messages::Out_UnresolvedLink( const String &      i_sLinkText,
114cdf0e10cSrcweir                               const String &      i_sFile,
115cdf0e10cSrcweir 							  uintt               i_nLine)
116cdf0e10cSrcweir {
117cdf0e10cSrcweir     AddValue( aUnresolvedLinks,
118cdf0e10cSrcweir               i_sLinkText,
119cdf0e10cSrcweir               i_sFile,
120cdf0e10cSrcweir               i_nLine );
121cdf0e10cSrcweir }
122cdf0e10cSrcweir 
123cdf0e10cSrcweir void
Out_TypeVsMemberMisuse(const String & i_sLinkText,const String & i_sFile,uintt i_nLine)124cdf0e10cSrcweir Messages::Out_TypeVsMemberMisuse( const String &      i_sLinkText,
125cdf0e10cSrcweir 								  const String &      i_sFile,
126cdf0e10cSrcweir 								  uintt               i_nLine)
127cdf0e10cSrcweir {
128cdf0e10cSrcweir     AddValue( aTypeVsMemberMisuses,
129cdf0e10cSrcweir               i_sLinkText,
130cdf0e10cSrcweir               i_sFile,
131cdf0e10cSrcweir               i_nLine );
132cdf0e10cSrcweir }
133cdf0e10cSrcweir 
134cdf0e10cSrcweir Messages &
The_()135cdf0e10cSrcweir Messages::The_()
136cdf0e10cSrcweir {
137cdf0e10cSrcweir     static Messages TheMessages_;
138cdf0e10cSrcweir     return TheMessages_;
139cdf0e10cSrcweir }
140cdf0e10cSrcweir 
141cdf0e10cSrcweir void
AddValue(MessageMap & o_dest,const String & i_sText,const String & i_sFile,uintt i_nLine)142cdf0e10cSrcweir Messages::AddValue( MessageMap &        o_dest,
143cdf0e10cSrcweir                     const String &      i_sText,
144cdf0e10cSrcweir                     const String &      i_sFile,
145cdf0e10cSrcweir 					uintt               i_nLine )
146cdf0e10cSrcweir {
147cdf0e10cSrcweir     String &
148cdf0e10cSrcweir         rDest = o_dest[Location(i_sFile,i_nLine)];
149cdf0e10cSrcweir     StreamLock
150cdf0e10cSrcweir         slDest(2000);
151cdf0e10cSrcweir     if (NOT rDest.empty())
152cdf0e10cSrcweir         slDest() << rDest;
153cdf0e10cSrcweir     slDest() << "\n    " << i_sText;
154cdf0e10cSrcweir     rDest = slDest().c_str();
155cdf0e10cSrcweir }
156cdf0e10cSrcweir 
157cdf0e10cSrcweir void
WriteParagraph(csv::File & o_out,const MessageMap & i_source,const String & i_title,const String &)158cdf0e10cSrcweir Messages::WriteParagraph( csv::File &         o_out,
159cdf0e10cSrcweir                           const MessageMap &  i_source,
160cdf0e10cSrcweir                           const String &      i_title,
161cdf0e10cSrcweir                           const String &      )
162cdf0e10cSrcweir {
163cdf0e10cSrcweir     StreamStr   aLine(2000);
164cdf0e10cSrcweir 
165cdf0e10cSrcweir     // Write title of paragraph:
166cdf0e10cSrcweir     aLine << i_title
167cdf0e10cSrcweir 		  << "\n";
168cdf0e10cSrcweir     o_out.write(aLine.c_str());
169cdf0e10cSrcweir 
170cdf0e10cSrcweir     aLine.seekp(0);
171cdf0e10cSrcweir     for (uintt i = i_title.size(); i > 0; --i)
172cdf0e10cSrcweir     {
173cdf0e10cSrcweir         aLine << '-';
174cdf0e10cSrcweir     }
175cdf0e10cSrcweir     aLine << "\n\n";
176cdf0e10cSrcweir     o_out.write(aLine.c_str());
177cdf0e10cSrcweir 
178cdf0e10cSrcweir     // Write Content
179cdf0e10cSrcweir     MessageMap::const_iterator it = i_source.begin();
180cdf0e10cSrcweir     MessageMap::const_iterator itEnd = i_source.end();
181cdf0e10cSrcweir     for ( ; it != itEnd; ++it )
182cdf0e10cSrcweir     {
183cdf0e10cSrcweir         aLine.seekp(0);
184cdf0e10cSrcweir         aLine << (*it).first.sFile;
185cdf0e10cSrcweir         // Nobody wants to see this, if we don't know the line:
186cdf0e10cSrcweir         if ((*it).first.nLine != 0)
187cdf0e10cSrcweir         {
188cdf0e10cSrcweir             aLine << ", line "
189cdf0e10cSrcweir                   << (*it).first.nLine;
190cdf0e10cSrcweir         }
191cdf0e10cSrcweir         if (NOT (*it).second.empty())
192cdf0e10cSrcweir         {
193cdf0e10cSrcweir             aLine << ':'
194cdf0e10cSrcweir                   << (*it).second
195cdf0e10cSrcweir                   << "\n";
196cdf0e10cSrcweir         }
197cdf0e10cSrcweir         o_out.write(aLine.c_str());
198cdf0e10cSrcweir     }
199cdf0e10cSrcweir     o_out.write("\n\n\n");
200cdf0e10cSrcweir }
201cdf0e10cSrcweir 
202cdf0e10cSrcweir }   // namespace autodoc
203