1*0841af79SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*0841af79SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*0841af79SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*0841af79SAndrew Rist  * distributed with this work for additional information
6*0841af79SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*0841af79SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*0841af79SAndrew Rist  * "License"); you may not use this file except in compliance
9*0841af79SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*0841af79SAndrew Rist  *
11*0841af79SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*0841af79SAndrew Rist  *
13*0841af79SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*0841af79SAndrew Rist  * software distributed under the License is distributed on an
15*0841af79SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*0841af79SAndrew Rist  * KIND, either express or implied.  See the License for the
17*0841af79SAndrew Rist  * specific language governing permissions and limitations
18*0841af79SAndrew Rist  * under the License.
19*0841af79SAndrew Rist  *
20*0841af79SAndrew Rist  *************************************************************/
21cdf0e10cSrcweir 
22cdf0e10cSrcweir #include <precomp.h>
23cdf0e10cSrcweir #include "hfi_property.hxx"
24cdf0e10cSrcweir 
25cdf0e10cSrcweir 
26cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES
27cdf0e10cSrcweir #include <ary/idl/i_ce.hxx>
28cdf0e10cSrcweir #include <ary/idl/ik_attribute.hxx>
29cdf0e10cSrcweir #include <ary/idl/ik_constant.hxx>
30cdf0e10cSrcweir #include <ary/idl/ik_enumvalue.hxx>
31cdf0e10cSrcweir #include <ary/idl/ik_property.hxx>
32cdf0e10cSrcweir #include <ary/idl/ik_structelem.hxx>
33cdf0e10cSrcweir #include <toolkit/hf_docentry.hxx>
34cdf0e10cSrcweir #include <toolkit/hf_title.hxx>
35cdf0e10cSrcweir #include "hfi_typetext.hxx"
36cdf0e10cSrcweir #include "hfi_doc.hxx"
37cdf0e10cSrcweir #include "hfi_tag.hxx"
38cdf0e10cSrcweir #include "hi_env.hxx"
39cdf0e10cSrcweir #include "hi_ary.hxx"
40cdf0e10cSrcweir #include "hi_linkhelper.hxx"
41cdf0e10cSrcweir 
42cdf0e10cSrcweir void
Produce_byData(const client & ce) const43cdf0e10cSrcweir HF_IdlDataMember::Produce_byData( const client & ce ) const
44cdf0e10cSrcweir {
45cdf0e10cSrcweir     write_Title(ce);
46cdf0e10cSrcweir     enter_ContentCell();
47cdf0e10cSrcweir     write_Declaration(ce);
48cdf0e10cSrcweir     write_Description(ce);
49cdf0e10cSrcweir     leave_ContentCell();
50cdf0e10cSrcweir }
51cdf0e10cSrcweir 
HF_IdlDataMember(Environment & io_rEnv,HF_SubTitleTable & o_table)52cdf0e10cSrcweir HF_IdlDataMember::HF_IdlDataMember( Environment &       io_rEnv,
53cdf0e10cSrcweir                                     HF_SubTitleTable &  o_table )
54cdf0e10cSrcweir     :   HtmlFactory_Idl( io_rEnv,
55cdf0e10cSrcweir                          &(o_table.Add_Row()
56cdf0e10cSrcweir                             >> *new Html::TableCell
57cdf0e10cSrcweir                                 << new Html::ClassAttr(C_sCellStyle_MDetail))
58cdf0e10cSrcweir                        )
59cdf0e10cSrcweir {
60cdf0e10cSrcweir }
61cdf0e10cSrcweir 
62cdf0e10cSrcweir const String sContentBorder("0");
63cdf0e10cSrcweir const String sContentWidth("96%");
64cdf0e10cSrcweir const String sContentPadding("5");
65cdf0e10cSrcweir const String sContentSpacing("0");
66cdf0e10cSrcweir 
67cdf0e10cSrcweir const String sBgWhite("#ffffff");
68cdf0e10cSrcweir const String sCenter("center");
69cdf0e10cSrcweir 
70cdf0e10cSrcweir void
write_Title(const client & i_ce) const71cdf0e10cSrcweir HF_IdlDataMember::write_Title( const client & i_ce ) const
72cdf0e10cSrcweir {
73cdf0e10cSrcweir     CurOut()
74cdf0e10cSrcweir         >> *new Html::Label(i_ce.LocalName())
75cdf0e10cSrcweir             << new Html::ClassAttr(C_sMemberTitle)
76cdf0e10cSrcweir             << i_ce.LocalName();
77cdf0e10cSrcweir }
78cdf0e10cSrcweir 
79cdf0e10cSrcweir void
write_Description(const client & i_ce) const80cdf0e10cSrcweir HF_IdlDataMember::write_Description( const client & i_ce ) const
81cdf0e10cSrcweir {
82cdf0e10cSrcweir     CurOut() << new Html::HorizontalLine;
83cdf0e10cSrcweir     write_Docu(CurOut(), i_ce);
84cdf0e10cSrcweir }
85cdf0e10cSrcweir 
86cdf0e10cSrcweir void
enter_ContentCell() const87cdf0e10cSrcweir HF_IdlDataMember::enter_ContentCell() const
88cdf0e10cSrcweir {
89cdf0e10cSrcweir 
90cdf0e10cSrcweir     Xml::Element &
91cdf0e10cSrcweir         rContentCell = CurOut()
92cdf0e10cSrcweir                         >> *new Html::Table( sContentBorder,
93cdf0e10cSrcweir                                              sContentWidth,
94cdf0e10cSrcweir                                              sContentPadding,
95cdf0e10cSrcweir                                              sContentSpacing )
96cdf0e10cSrcweir                             << new Html::ClassAttr("table-in-data")
97cdf0e10cSrcweir                             << new Html::BgColorAttr(sBgWhite)
98cdf0e10cSrcweir                             << new Html::AlignAttr(sCenter)
99cdf0e10cSrcweir                             >> *new Html::TableRow
100cdf0e10cSrcweir                                 >> *new Html::TableCell;
101cdf0e10cSrcweir     Out().Enter(rContentCell);
102cdf0e10cSrcweir }
103cdf0e10cSrcweir 
104cdf0e10cSrcweir 
105cdf0e10cSrcweir void
leave_ContentCell() const106cdf0e10cSrcweir HF_IdlDataMember::leave_ContentCell() const
107cdf0e10cSrcweir {
108cdf0e10cSrcweir     Out().Leave();
109cdf0e10cSrcweir }
110cdf0e10cSrcweir 
111cdf0e10cSrcweir 
~HF_IdlProperty()112cdf0e10cSrcweir HF_IdlProperty::~HF_IdlProperty()
113cdf0e10cSrcweir {
114cdf0e10cSrcweir }
115cdf0e10cSrcweir 
116cdf0e10cSrcweir typedef ary::idl::ifc_property::attr    PropertyAttr;
117cdf0e10cSrcweir 
118cdf0e10cSrcweir void
write_Declaration(const client & i_ce) const119cdf0e10cSrcweir HF_IdlProperty::write_Declaration( const client & i_ce ) const
120cdf0e10cSrcweir {
121cdf0e10cSrcweir     if (PropertyAttr::HasAnyStereotype(i_ce))
122cdf0e10cSrcweir     {
123cdf0e10cSrcweir         CurOut() << "[ ";
124cdf0e10cSrcweir         if (PropertyAttr::IsReadOnly(i_ce))
125cdf0e10cSrcweir             CurOut() << "readonly ";
126cdf0e10cSrcweir         if (PropertyAttr::IsBound(i_ce))
127cdf0e10cSrcweir             CurOut() << "bound ";
128cdf0e10cSrcweir         if (PropertyAttr::IsConstrained(i_ce))
129cdf0e10cSrcweir             CurOut() << "constrained ";
130cdf0e10cSrcweir         if (PropertyAttr::IsMayBeAmbiguous(i_ce))
131cdf0e10cSrcweir             CurOut() << "maybeambiguous ";
132cdf0e10cSrcweir         if (PropertyAttr::IsMayBeDefault(i_ce))
133cdf0e10cSrcweir             CurOut() << "maybedefault ";
134cdf0e10cSrcweir         if (PropertyAttr::IsMayBeVoid(i_ce))
135cdf0e10cSrcweir             CurOut() << "maybevoid ";
136cdf0e10cSrcweir         if (PropertyAttr::IsRemovable(i_ce))
137cdf0e10cSrcweir             CurOut() << "removable ";
138cdf0e10cSrcweir         if (PropertyAttr::IsTransient(i_ce))
139cdf0e10cSrcweir             CurOut() << "transient ";
140cdf0e10cSrcweir         CurOut() << "] ";
141cdf0e10cSrcweir     }   // end if
142cdf0e10cSrcweir 
143cdf0e10cSrcweir     HF_IdlTypeText
144cdf0e10cSrcweir         aType( Env(), CurOut(), true );
145cdf0e10cSrcweir     aType.Produce_byData( PropertyAttr::Type(i_ce) );
146cdf0e10cSrcweir 
147cdf0e10cSrcweir     CurOut() << " " >> *new Html::Bold << i_ce.LocalName();
148cdf0e10cSrcweir     CurOut() << ";";
149cdf0e10cSrcweir }
150cdf0e10cSrcweir 
151cdf0e10cSrcweir 
152cdf0e10cSrcweir 
153cdf0e10cSrcweir 
~HF_IdlAttribute()154cdf0e10cSrcweir HF_IdlAttribute::~HF_IdlAttribute()
155cdf0e10cSrcweir {
156cdf0e10cSrcweir }
157cdf0e10cSrcweir 
158cdf0e10cSrcweir typedef ary::idl::ifc_attribute::attr    AttributeAttr;
159cdf0e10cSrcweir 
160cdf0e10cSrcweir void
write_Declaration(const client & i_ce) const161cdf0e10cSrcweir HF_IdlAttribute::write_Declaration( const client & i_ce ) const
162cdf0e10cSrcweir {
163cdf0e10cSrcweir     if (AttributeAttr::HasAnyStereotype(i_ce))
164cdf0e10cSrcweir     {
165cdf0e10cSrcweir         CurOut() << "[ ";
166cdf0e10cSrcweir         if (AttributeAttr::IsReadOnly(i_ce))
167cdf0e10cSrcweir             CurOut() << "readonly ";
168cdf0e10cSrcweir         if (AttributeAttr::IsBound(i_ce))
169cdf0e10cSrcweir             CurOut() << "bound ";
170cdf0e10cSrcweir         CurOut() << "] ";
171cdf0e10cSrcweir     }
172cdf0e10cSrcweir 
173cdf0e10cSrcweir     HF_IdlTypeText
174cdf0e10cSrcweir         aType( Env(), CurOut(), true );
175cdf0e10cSrcweir     aType.Produce_byData( AttributeAttr::Type(i_ce) );
176cdf0e10cSrcweir 
177cdf0e10cSrcweir     CurOut()
178cdf0e10cSrcweir         << " "
179cdf0e10cSrcweir         >> *new Html::Bold
180cdf0e10cSrcweir             << i_ce.LocalName();
181cdf0e10cSrcweir 
182cdf0e10cSrcweir     dyn_type_list pGetExceptions;
183cdf0e10cSrcweir     dyn_type_list pSetExceptions;
184cdf0e10cSrcweir     AttributeAttr::Get_GetExceptions(pGetExceptions, i_ce);
185cdf0e10cSrcweir     AttributeAttr::Get_SetExceptions(pSetExceptions, i_ce);
186cdf0e10cSrcweir 
187cdf0e10cSrcweir     bool bGetRaises = (*pGetExceptions).IsValid();
188cdf0e10cSrcweir     bool bSetRaises = (*pSetExceptions).IsValid();
189cdf0e10cSrcweir     bool bRaises = bGetRaises OR bSetRaises;
190cdf0e10cSrcweir     if (bRaises)
191cdf0e10cSrcweir     {
192cdf0e10cSrcweir         HF_DocEntryList aSub(CurOut());
193cdf0e10cSrcweir 
194cdf0e10cSrcweir         if (bGetRaises)
195cdf0e10cSrcweir         {
196cdf0e10cSrcweir             Xml::Element &
197cdf0e10cSrcweir                 rGet = aSub.Produce_Definition();
198cdf0e10cSrcweir             HF_IdlTypeText
199cdf0e10cSrcweir                 aExc(Env(), rGet, true);
200cdf0e10cSrcweir             type_list & itExc = *pGetExceptions;
201cdf0e10cSrcweir 
202cdf0e10cSrcweir             rGet << "get raises (";
203cdf0e10cSrcweir             aExc.Produce_byData(*itExc);
204cdf0e10cSrcweir             for (++itExc; itExc.operator bool(); ++itExc)
205cdf0e10cSrcweir             {
206cdf0e10cSrcweir                 rGet
207cdf0e10cSrcweir                     << ",";
208cdf0e10cSrcweir                 aExc.Produce_byData(*itExc);
209cdf0e10cSrcweir             }   // end for
210cdf0e10cSrcweir             rGet << ")";
211cdf0e10cSrcweir             if (NOT bSetRaises)
212cdf0e10cSrcweir                 rGet << ";";
213cdf0e10cSrcweir         }   // end if (bGetRaises)
214cdf0e10cSrcweir 
215cdf0e10cSrcweir         if (bSetRaises)
216cdf0e10cSrcweir         {
217cdf0e10cSrcweir             Xml::Element &
218cdf0e10cSrcweir                 rSet = aSub.Produce_Definition();
219cdf0e10cSrcweir             HF_IdlTypeText
220cdf0e10cSrcweir                 aExc(Env(), rSet, true);
221cdf0e10cSrcweir             type_list & itExc = *pSetExceptions;
222cdf0e10cSrcweir 
223cdf0e10cSrcweir             rSet << "set raises (";
224cdf0e10cSrcweir             aExc.Produce_byData(*itExc);
225cdf0e10cSrcweir             for (++itExc; itExc.operator bool(); ++itExc)
226cdf0e10cSrcweir             {
227cdf0e10cSrcweir                 rSet
228cdf0e10cSrcweir                     << ",";
229cdf0e10cSrcweir                 aExc.Produce_byData(*itExc);
230cdf0e10cSrcweir             }   // end for
231cdf0e10cSrcweir             rSet << ");";
232cdf0e10cSrcweir         }   // end if (bSetRaises)
233cdf0e10cSrcweir     }
234cdf0e10cSrcweir     else
235cdf0e10cSrcweir     {
236cdf0e10cSrcweir         CurOut() << ";";
237cdf0e10cSrcweir     }
238cdf0e10cSrcweir }
239cdf0e10cSrcweir 
240cdf0e10cSrcweir 
241cdf0e10cSrcweir 
242cdf0e10cSrcweir 
~HF_IdlEnumValue()243cdf0e10cSrcweir HF_IdlEnumValue::~HF_IdlEnumValue()
244cdf0e10cSrcweir {
245cdf0e10cSrcweir }
246cdf0e10cSrcweir 
247cdf0e10cSrcweir typedef ary::idl::ifc_enumvalue::attr    EnumValueAttr;
248cdf0e10cSrcweir 
249cdf0e10cSrcweir void
write_Declaration(const client & i_ce) const250cdf0e10cSrcweir HF_IdlEnumValue::write_Declaration( const client & i_ce ) const
251cdf0e10cSrcweir {
252cdf0e10cSrcweir     CurOut()
253cdf0e10cSrcweir         >> *new Html::Bold
254cdf0e10cSrcweir             << i_ce.LocalName();
255cdf0e10cSrcweir 
256cdf0e10cSrcweir     const String &
257cdf0e10cSrcweir         rValue = EnumValueAttr::Value(i_ce);
258cdf0e10cSrcweir     if ( NOT rValue.empty() )
259cdf0e10cSrcweir     {    CurOut() << " " // << " = "    // In the moment this is somehow in the value
260cdf0e10cSrcweir                  << rValue;
261cdf0e10cSrcweir         // CurOut() << ",";             // In the moment this is somehow in the value
262cdf0e10cSrcweir     }
263cdf0e10cSrcweir     else
264cdf0e10cSrcweir         CurOut() << ",";
265cdf0e10cSrcweir }
266cdf0e10cSrcweir 
267cdf0e10cSrcweir 
~HF_IdlConstant()268cdf0e10cSrcweir HF_IdlConstant::~HF_IdlConstant()
269cdf0e10cSrcweir {
270cdf0e10cSrcweir }
271cdf0e10cSrcweir 
272cdf0e10cSrcweir typedef ary::idl::ifc_constant::attr    ConstantAttr;
273cdf0e10cSrcweir 
274cdf0e10cSrcweir void
write_Declaration(const client & i_ce) const275cdf0e10cSrcweir HF_IdlConstant::write_Declaration( const client & i_ce ) const
276cdf0e10cSrcweir {
277cdf0e10cSrcweir     CurOut() << "const ";
278cdf0e10cSrcweir     HF_IdlTypeText
279cdf0e10cSrcweir         aType( Env(), CurOut(), true );
280cdf0e10cSrcweir     aType.Produce_byData(ConstantAttr::Type(i_ce));
281cdf0e10cSrcweir     CurOut()
282cdf0e10cSrcweir         << " "
283cdf0e10cSrcweir         >> *new Html::Bold
284cdf0e10cSrcweir             << i_ce.LocalName();
285cdf0e10cSrcweir     const String &
286cdf0e10cSrcweir         rValue = ConstantAttr::Value(i_ce);
287cdf0e10cSrcweir     CurOut() << " "     // << " = "    // In the moment this is somehow in the value
288cdf0e10cSrcweir              << rValue;
289cdf0e10cSrcweir     // << ";";  // In the moment this is somehow in the value
290cdf0e10cSrcweir }
291cdf0e10cSrcweir 
292cdf0e10cSrcweir 
~HF_IdlStructElement()293cdf0e10cSrcweir HF_IdlStructElement::~HF_IdlStructElement()
294cdf0e10cSrcweir {
295cdf0e10cSrcweir }
296cdf0e10cSrcweir 
297cdf0e10cSrcweir typedef ary::idl::ifc_structelement::attr    StructElementAttr;
298cdf0e10cSrcweir 
299cdf0e10cSrcweir void
write_Declaration(const client & i_ce) const300cdf0e10cSrcweir HF_IdlStructElement::write_Declaration( const client & i_ce ) const
301cdf0e10cSrcweir {
302cdf0e10cSrcweir     HF_IdlTypeText
303cdf0e10cSrcweir         aType( Env(), CurOut(), true );
304cdf0e10cSrcweir     aType.Produce_byData(StructElementAttr::Type(i_ce));
305cdf0e10cSrcweir     CurOut()
306cdf0e10cSrcweir         << " "
307cdf0e10cSrcweir         >> *new Html::Bold
308cdf0e10cSrcweir             << i_ce.LocalName();
309cdf0e10cSrcweir     CurOut()
310cdf0e10cSrcweir         << ";";
311cdf0e10cSrcweir }
312cdf0e10cSrcweir 
~HF_IdlCommentedRelationElement()313cdf0e10cSrcweir HF_IdlCommentedRelationElement::~HF_IdlCommentedRelationElement()
314cdf0e10cSrcweir {
315cdf0e10cSrcweir }
316cdf0e10cSrcweir 
317cdf0e10cSrcweir void
produce_Summary(Environment & io_env,Xml::Element & io_context,const comref & i_commentedRef,const client & i_rScopeGivingCe)318cdf0e10cSrcweir HF_IdlCommentedRelationElement::produce_Summary( Environment &   io_env,
319cdf0e10cSrcweir                                                  Xml::Element &  io_context,
320cdf0e10cSrcweir                                                  const comref &  i_commentedRef,
321cdf0e10cSrcweir 									             const client &  i_rScopeGivingCe )
322cdf0e10cSrcweir {
323cdf0e10cSrcweir     csv_assert( i_commentedRef.Info() );
324cdf0e10cSrcweir 
325cdf0e10cSrcweir     const ary::idl::Type_id aType = i_commentedRef.Type();
326cdf0e10cSrcweir     const ce_info &         rDocu = *i_commentedRef.Info();
327cdf0e10cSrcweir 
328cdf0e10cSrcweir     bool bShort = NOT rDocu.Short().IsEmpty();
329cdf0e10cSrcweir     bool bDescr = NOT rDocu.Description().IsEmpty();
330cdf0e10cSrcweir 
331cdf0e10cSrcweir     if ( bShort )
332cdf0e10cSrcweir     {
333cdf0e10cSrcweir         HF_IdlDocuTextDisplay
334cdf0e10cSrcweir                 aDescription(io_env, 0, i_rScopeGivingCe);
335cdf0e10cSrcweir 
336cdf0e10cSrcweir         Xml::Element& rPara = io_context >> *new Html::Paragraph;
337cdf0e10cSrcweir         aDescription.Out().Enter( rPara );
338cdf0e10cSrcweir         rDocu.Short().DisplayAt( aDescription );
339cdf0e10cSrcweir 
340cdf0e10cSrcweir         // if there's more than just the summary - i.e. a description, or usage restrictions, or tags -,
341cdf0e10cSrcweir         // then add a link to the details section
342cdf0e10cSrcweir         if ( bDescr OR rDocu.IsDeprecated() OR rDocu.IsOptional() OR NOT rDocu.Tags().empty() )
343cdf0e10cSrcweir         {
344cdf0e10cSrcweir             StreamLock aLocalLink(100);
345cdf0e10cSrcweir             aLocalLink() << "#" << get_LocalLinkName(io_env, i_commentedRef);
346cdf0e10cSrcweir 
347cdf0e10cSrcweir             aDescription.Out().Out() << "(";
348cdf0e10cSrcweir             aDescription.Out().Out()
349cdf0e10cSrcweir                 >> *new Html::Link( aLocalLink().c_str() )
350cdf0e10cSrcweir                     << "details";
351cdf0e10cSrcweir             aDescription.Out().Out() << ")";
352cdf0e10cSrcweir         }
353cdf0e10cSrcweir 
354cdf0e10cSrcweir         aDescription.Out().Leave();
355cdf0e10cSrcweir     }
356cdf0e10cSrcweir }
357cdf0e10cSrcweir 
358cdf0e10cSrcweir void
produce_LinkDoc(Environment & io_env,const client & i_ce,Xml::Element & io_context,const comref & i_commentedRef,const E_DocType i_docType)359cdf0e10cSrcweir HF_IdlCommentedRelationElement::produce_LinkDoc( Environment &   io_env,
360cdf0e10cSrcweir                                                  const client &  i_ce,
361cdf0e10cSrcweir                                                  Xml::Element &  io_context,
362cdf0e10cSrcweir                                                  const comref &  i_commentedRef,
363cdf0e10cSrcweir                                                  const E_DocType i_docType )
364cdf0e10cSrcweir {
365cdf0e10cSrcweir     if ( i_commentedRef.Info() != 0 )
366cdf0e10cSrcweir     {
367cdf0e10cSrcweir         if ( i_docType == doctype_complete )
368cdf0e10cSrcweir         {
369cdf0e10cSrcweir             HF_DocEntryList aDocList(io_context);
370cdf0e10cSrcweir             HF_IdlDocu aDocuDisplay(io_env, aDocList);
371cdf0e10cSrcweir 
372cdf0e10cSrcweir             aDocuDisplay.Produce_fromReference(*i_commentedRef.Info(), i_ce);
373cdf0e10cSrcweir         }
374cdf0e10cSrcweir         else
375cdf0e10cSrcweir         {
376cdf0e10cSrcweir             produce_Summary(io_env, io_context, i_commentedRef, i_ce);
377cdf0e10cSrcweir         }
378cdf0e10cSrcweir     }
379cdf0e10cSrcweir     else
380cdf0e10cSrcweir     {
381cdf0e10cSrcweir         HF_DocEntryList aDocList(io_context);
382cdf0e10cSrcweir 
383cdf0e10cSrcweir         const client *
384cdf0e10cSrcweir             pCe = io_env.Linker().Search_CeFromType(i_commentedRef.Type());
385cdf0e10cSrcweir         const ce_info *
386cdf0e10cSrcweir             pShort = pCe != 0
387cdf0e10cSrcweir                         ?   Get_IdlDocu(pCe->Docu())
388cdf0e10cSrcweir                         :   (const ce_info *)(0);
389cdf0e10cSrcweir         if ( pShort != 0 )
390cdf0e10cSrcweir         {
391cdf0e10cSrcweir             aDocList.Produce_NormalTerm("(referenced entity's summary:)");
392cdf0e10cSrcweir             Xml::Element &
393cdf0e10cSrcweir                 rDef = aDocList.Produce_Definition();
394cdf0e10cSrcweir             HF_IdlDocuTextDisplay
395cdf0e10cSrcweir                 aShortDisplay( io_env, &rDef, *pCe);
396cdf0e10cSrcweir             pShort->Short().DisplayAt(aShortDisplay);
397cdf0e10cSrcweir         }   // end if (pShort != 0)
398cdf0e10cSrcweir     }   // endif ( (*i_commentedRef).Info() != 0 ) else
399cdf0e10cSrcweir }
400cdf0e10cSrcweir 
401cdf0e10cSrcweir 
402cdf0e10cSrcweir String
get_LocalLinkName(Environment & io_env,const comref & i_commentedRef)403cdf0e10cSrcweir HF_IdlCommentedRelationElement::get_LocalLinkName( Environment &  io_env,
404cdf0e10cSrcweir                                                    const comref & i_commentedRef )
405cdf0e10cSrcweir {
406cdf0e10cSrcweir     StringVector        aModules;
407cdf0e10cSrcweir     String              sLocalName;
408cdf0e10cSrcweir     ce_id               nCe;
409cdf0e10cSrcweir 	int                 nSequenceCount = 0;
410cdf0e10cSrcweir 
411cdf0e10cSrcweir     const ary::idl::Type &
412cdf0e10cSrcweir         rType = io_env.Data().Find_Type(i_commentedRef.Type());
413cdf0e10cSrcweir     io_env.Data().Get_TypeText(aModules, sLocalName, nCe, nSequenceCount, rType);
414cdf0e10cSrcweir 
415cdf0e10cSrcweir     // speaking strictly, this is not correct: If we have two interfaces with the same local
416cdf0e10cSrcweir     // name, but in different modules, then the link name will be ambiguous. However, this should
417cdf0e10cSrcweir     // be too seldom a case to really make the link names that ugly by adding the module information.
418cdf0e10cSrcweir     return sLocalName;
419cdf0e10cSrcweir }
420cdf0e10cSrcweir 
421cdf0e10cSrcweir void
write_Title(const client &) const422cdf0e10cSrcweir HF_IdlCommentedRelationElement::write_Title( const client & /*i_ce*/ ) const
423cdf0e10cSrcweir {
424cdf0e10cSrcweir 
425cdf0e10cSrcweir     Xml::Element &
426cdf0e10cSrcweir         rAnchor = CurOut()
427cdf0e10cSrcweir                     >> *new Html::Label(get_LocalLinkName(Env(), m_relation))
428cdf0e10cSrcweir                         << new Html::ClassAttr(C_sMemberTitle);
429cdf0e10cSrcweir 
430cdf0e10cSrcweir     HF_IdlTypeText
431cdf0e10cSrcweir         aText(Env(), rAnchor, true);
432cdf0e10cSrcweir     aText.Produce_byData(m_relation.Type());
433cdf0e10cSrcweir }
434cdf0e10cSrcweir 
435cdf0e10cSrcweir void
write_Declaration(const client &) const436cdf0e10cSrcweir HF_IdlCommentedRelationElement::write_Declaration( const client & /*i_ce*/ ) const
437cdf0e10cSrcweir {
438cdf0e10cSrcweir     // nothing to do here - an entity which is a commented relation does not have a declaration
439cdf0e10cSrcweir }
440cdf0e10cSrcweir 
441cdf0e10cSrcweir void
write_Description(const client & i_ce) const442cdf0e10cSrcweir HF_IdlCommentedRelationElement::write_Description( const client & i_ce ) const
443cdf0e10cSrcweir {
444cdf0e10cSrcweir     produce_LinkDoc( Env(), i_ce, CurOut(), m_relation, doctype_complete );
445cdf0e10cSrcweir }
446