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 "hfi_doc.hxx"
24cdf0e10cSrcweir
25cdf0e10cSrcweir
26cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES
27cdf0e10cSrcweir #include <ary/idl/i_ce.hxx>
28cdf0e10cSrcweir #include <ary/doc/d_oldidldocu.hxx>
29cdf0e10cSrcweir #include <ary_i/d_token.hxx>
30cdf0e10cSrcweir #include <toolkit/hf_docentry.hxx>
31cdf0e10cSrcweir #include "hfi_tag.hxx"
32cdf0e10cSrcweir #include "hi_ary.hxx"
33cdf0e10cSrcweir
34cdf0e10cSrcweir
35cdf0e10cSrcweir
36cdf0e10cSrcweir
HF_IdlDocu(Environment & io_rEnv,HF_DocEntryList & o_rOut)37cdf0e10cSrcweir HF_IdlDocu::HF_IdlDocu( Environment & io_rEnv,
38cdf0e10cSrcweir HF_DocEntryList & o_rOut )
39cdf0e10cSrcweir : HtmlFactory_Idl( io_rEnv, &o_rOut.CurOut() ),
40cdf0e10cSrcweir rOut(o_rOut)
41cdf0e10cSrcweir {
42cdf0e10cSrcweir }
43cdf0e10cSrcweir
~HF_IdlDocu()44cdf0e10cSrcweir HF_IdlDocu::~HF_IdlDocu()
45cdf0e10cSrcweir {
46cdf0e10cSrcweir }
47cdf0e10cSrcweir
48cdf0e10cSrcweir void
Produce_fromCodeEntity(const client & i_ce) const49cdf0e10cSrcweir HF_IdlDocu::Produce_fromCodeEntity( const client & i_ce ) const
50cdf0e10cSrcweir {
51cdf0e10cSrcweir const ce_info *
52cdf0e10cSrcweir i_pDocu = Get_IdlDocu(i_ce.Docu());
53cdf0e10cSrcweir if (i_pDocu != 0)
54cdf0e10cSrcweir Produce_byDocuAndScope(*i_pDocu, &i_ce, i_ce);
55cdf0e10cSrcweir }
56cdf0e10cSrcweir
57cdf0e10cSrcweir void
Produce_fromReference(const ce_info & i_rDocuForReference,const client & i_rScopeGivingCe) const58cdf0e10cSrcweir HF_IdlDocu::Produce_fromReference( const ce_info & i_rDocuForReference,
59cdf0e10cSrcweir const client & i_rScopeGivingCe ) const
60cdf0e10cSrcweir {
61cdf0e10cSrcweir Produce_byDocuAndScope(i_rDocuForReference, 0, i_rScopeGivingCe );
62cdf0e10cSrcweir }
63cdf0e10cSrcweir
64cdf0e10cSrcweir void
Produce_byDocuAndScope(const ce_info & i_rDocu,const client * i_pClient,const client & i_rScopeGivingCe) const65cdf0e10cSrcweir HF_IdlDocu::Produce_byDocuAndScope( const ce_info & i_rDocu,
66cdf0e10cSrcweir const client * i_pClient,
67cdf0e10cSrcweir const client & i_rScopeGivingCe ) const
68cdf0e10cSrcweir {
69cdf0e10cSrcweir bool bShort = NOT i_rDocu.Short().IsEmpty();
70cdf0e10cSrcweir bool bDescr = NOT i_rDocu.Description().IsEmpty();
71cdf0e10cSrcweir
72cdf0e10cSrcweir if ( i_rDocu.IsDeprecated()
73cdf0e10cSrcweir OR (
74cdf0e10cSrcweir (i_pClient != 0 ? i_pClient->SightLevel() == ary::idl::sl_File : false)
75cdf0e10cSrcweir AND NOT i_rDocu.IsPublished()
76cdf0e10cSrcweir )
77cdf0e10cSrcweir OR i_rDocu.IsOptional() )
78cdf0e10cSrcweir { // any usage restriction
79cdf0e10cSrcweir rOut.Produce_Term("Usage Restrictions");
80cdf0e10cSrcweir
81cdf0e10cSrcweir if ( i_rDocu.IsDeprecated() )
82cdf0e10cSrcweir rOut.Produce_Definition() >> *new Html::Italic << "deprecated";
83cdf0e10cSrcweir if ( (i_pClient != 0 ? i_pClient->SightLevel() == ary::idl::sl_File : false)
84cdf0e10cSrcweir AND NOT i_rDocu.IsPublished() )
85cdf0e10cSrcweir rOut.Produce_Definition() >> *new Html::Italic << "not published";
86cdf0e10cSrcweir if ( i_rDocu.IsOptional() )
87cdf0e10cSrcweir rOut.Produce_Definition() >> *new Html::Italic << "optional";
88cdf0e10cSrcweir
89cdf0e10cSrcweir if ( i_rDocu.IsDeprecated() AND
90cdf0e10cSrcweir // KORR_FUTURE
91cdf0e10cSrcweir // Workaround, because DocuTex2::IsEmpty() does not
92cdf0e10cSrcweir // calculate whitespace tokens only as empty.
93cdf0e10cSrcweir i_rDocu.DeprecatedText().Tokens().size() > 1 )
94cdf0e10cSrcweir {
95cdf0e10cSrcweir rOut.Produce_Term("Deprecation Info");
96cdf0e10cSrcweir
97cdf0e10cSrcweir HF_IdlDocuTextDisplay
98cdf0e10cSrcweir aDescription( Env(), 0, i_rScopeGivingCe);
99cdf0e10cSrcweir aDescription.Out().Enter( rOut.Produce_Definition() );
100cdf0e10cSrcweir i_rDocu.DeprecatedText().DisplayAt( aDescription );
101cdf0e10cSrcweir aDescription.Out().Leave();
102cdf0e10cSrcweir }
103cdf0e10cSrcweir } // end if (<any usage restriction>)
104cdf0e10cSrcweir
105cdf0e10cSrcweir if ( bShort OR bDescr )
106cdf0e10cSrcweir {
107cdf0e10cSrcweir rOut.Produce_Term("Description");
108cdf0e10cSrcweir HF_IdlDocuTextDisplay
109cdf0e10cSrcweir aDescription( Env(), 0, i_rScopeGivingCe);
110cdf0e10cSrcweir if (bShort)
111cdf0e10cSrcweir {
112cdf0e10cSrcweir aDescription.Out().Enter( rOut.Produce_Definition() );
113cdf0e10cSrcweir i_rDocu.Short().DisplayAt( aDescription );
114cdf0e10cSrcweir aDescription.Out().Leave();
115cdf0e10cSrcweir }
116cdf0e10cSrcweir if (bDescr)
117cdf0e10cSrcweir {
118cdf0e10cSrcweir aDescription.Out().Enter( rOut.Produce_Definition() );
119cdf0e10cSrcweir i_rDocu.Description().DisplayAt( aDescription );
120cdf0e10cSrcweir aDescription.Out().Leave();
121cdf0e10cSrcweir }
122cdf0e10cSrcweir }
123cdf0e10cSrcweir
124cdf0e10cSrcweir std::vector< csi::dsapi::DT_SeeAlsoAtTag* >
125cdf0e10cSrcweir aSeeAlsosWithoutText;
126cdf0e10cSrcweir std::vector< csi::dsapi::DT_SeeAlsoAtTag* >
127cdf0e10cSrcweir aSeeAlsosWithText;
128cdf0e10cSrcweir
129cdf0e10cSrcweir for ( std::vector< ary::inf::AtTag2* >::const_iterator
130cdf0e10cSrcweir iter = i_rDocu.Tags().begin();
131cdf0e10cSrcweir iter != i_rDocu.Tags().end();
132cdf0e10cSrcweir ++iter )
133cdf0e10cSrcweir {
134cdf0e10cSrcweir csi::dsapi::DT_SeeAlsoAtTag*
135cdf0e10cSrcweir pSeeAlso = dynamic_cast< csi::dsapi::DT_SeeAlsoAtTag * >(*iter);
136cdf0e10cSrcweir if (pSeeAlso != 0 )
137cdf0e10cSrcweir {
138cdf0e10cSrcweir if ( pSeeAlso->Text().IsEmpty() )
139cdf0e10cSrcweir {
140cdf0e10cSrcweir aSeeAlsosWithoutText.push_back(pSeeAlso);
141cdf0e10cSrcweir }
142cdf0e10cSrcweir else
143cdf0e10cSrcweir {
144cdf0e10cSrcweir aSeeAlsosWithText.push_back(pSeeAlso);
145cdf0e10cSrcweir }
146cdf0e10cSrcweir continue;
147cdf0e10cSrcweir }
148cdf0e10cSrcweir
149cdf0e10cSrcweir if ( strlen( (*iter)->Title() ) > 0 )
150cdf0e10cSrcweir {
151cdf0e10cSrcweir HF_IdlTag
152cdf0e10cSrcweir aTag(Env(), i_rScopeGivingCe);
153cdf0e10cSrcweir Xml::Element &
154cdf0e10cSrcweir rTerm = rOut.Produce_Term();
155cdf0e10cSrcweir aTag.Produce_byData( rTerm,
156cdf0e10cSrcweir rOut.Produce_Definition(),
157cdf0e10cSrcweir *(*iter) );
158cdf0e10cSrcweir }
159cdf0e10cSrcweir } // end for
160cdf0e10cSrcweir
161cdf0e10cSrcweir if (aSeeAlsosWithoutText.size() > 0)
162cdf0e10cSrcweir {
163cdf0e10cSrcweir HF_IdlTag
164cdf0e10cSrcweir aSeeAlsoTag(Env(), i_rScopeGivingCe);
165cdf0e10cSrcweir Xml::Element &
166cdf0e10cSrcweir rTerm = rOut.Produce_Term();
167cdf0e10cSrcweir aSeeAlsoTag.Produce_byData( rTerm,
168cdf0e10cSrcweir rOut.Produce_Definition(),
169cdf0e10cSrcweir aSeeAlsosWithoutText );
170cdf0e10cSrcweir }
171cdf0e10cSrcweir
172cdf0e10cSrcweir for ( std::vector< csi::dsapi::DT_SeeAlsoAtTag* >::const_iterator
173cdf0e10cSrcweir itSee2 = aSeeAlsosWithText.begin();
174cdf0e10cSrcweir itSee2 != aSeeAlsosWithText.end();
175cdf0e10cSrcweir ++itSee2 )
176cdf0e10cSrcweir {
177cdf0e10cSrcweir HF_IdlTag
178cdf0e10cSrcweir aTag(Env(), i_rScopeGivingCe);
179cdf0e10cSrcweir Xml::Element &
180cdf0e10cSrcweir rTerm = rOut.Produce_Term();
181cdf0e10cSrcweir aTag.Produce_byData( rTerm,
182cdf0e10cSrcweir rOut.Produce_Definition(),
183cdf0e10cSrcweir *(*itSee2) );
184cdf0e10cSrcweir } // end for
185cdf0e10cSrcweir }
186