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