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