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_typetext.hxx"
22 :
23 :
24 : // NOT FULLY DEFINED SERVICES
25 : #include <string.h>
26 : #include <ary/idl/i_type.hxx>
27 : #include <ary/idl/i_ce.hxx>
28 : #include <ary/idl/i_module.hxx>
29 : #include <ary/idl/i_module.hxx>
30 : #include <ary/idl/ik_ce.hxx>
31 : #include <adc_cl.hxx>
32 : #include <adc_msg.hxx>
33 : #include "hi_linkhelper.hxx"
34 :
35 :
36 :
37 :
38 :
39 :
40 : inline const ary::idl::Module *
41 9169 : HF_IdlTypeText::referingModule() const
42 : {
43 9169 : if (pReferingCe == 0)
44 0 : return Env().Linker().Search_CurModule();
45 : else
46 9169 : return &Env().Data().Find_Module(pReferingCe->NameRoom());
47 : }
48 :
49 : inline const HF_IdlTypeText::client *
50 1036 : HF_IdlTypeText::referingCe() const
51 : {
52 1036 : return pReferingCe;
53 : }
54 :
55 :
56 49530 : HF_IdlTypeText::HF_IdlTypeText( Environment & io_rEnv,
57 : Xml::Element & o_rOut,
58 : const client * i_pScopeGivingCe )
59 : : HtmlFactory_Idl(io_rEnv, &o_rOut),
60 49530 : pReferingCe( i_pScopeGivingCe )
61 : {
62 49530 : }
63 :
64 27 : HF_IdlTypeText::HF_IdlTypeText( Environment & io_rEnv,
65 : E_Index )
66 : : HtmlFactory_Idl(io_rEnv, 0),
67 27 : pReferingCe( 0 )
68 : {
69 27 : }
70 :
71 49557 : HF_IdlTypeText::~HF_IdlTypeText()
72 : {
73 49557 : }
74 :
75 : void
76 33226 : HF_IdlTypeText::Produce_byData(ary::idl::Type_id i_idType) const
77 : {
78 33226 : StringVector aModule_;
79 33226 : String sName;
80 33226 : ce_id nCe;
81 33226 : int nSequenceCount = 0;
82 33226 : csv::erase_container(aModule_);
83 :
84 : const ary::idl::Type &
85 33226 : rType = Env().Data().Find_Type(i_idType);
86 33226 : Env().Data().Get_TypeText(aModule_, sName, nCe, nSequenceCount, rType);
87 :
88 33226 : if ( Env().Data().IsBuiltInOrRelated(rType) )
89 : {
90 17289 : produce_BuiltIn(sName,nSequenceCount);
91 : }
92 : else
93 : {
94 : produce_FromStd( aModule_,
95 : sName,
96 15937 : String::Null_(),
97 : nSequenceCount,
98 15937 : (nCe.IsValid() ? exists_yes : exists_no),
99 47811 : rType.FirstEnclosedNonSequenceType(Env().Gate()).TemplateParameters() );
100 33226 : }
101 33226 : }
102 :
103 : void
104 23980 : HF_IdlTypeText::Produce_byData( ary::idl::Ce_id i_idCe ) const
105 : {
106 23980 : StringVector aModule_;
107 23980 : String sCe;
108 23980 : String sMember;
109 23980 : csv::erase_container(aModule_);
110 :
111 : const ary::idl::CodeEntity &
112 23980 : rCe = Env().Data().Find_Ce(i_idCe);
113 23980 : Env().Data().Get_CeText(aModule_, sCe, sMember, rCe);
114 23980 : produce_FromStd(aModule_, sCe, sMember, 0, exists_yes);
115 23980 : }
116 :
117 : void
118 1615 : HF_IdlTypeText::Produce_byData( const String & i_sFullName ) const
119 : {
120 1615 : if ( strncmp(i_sFullName,"http://", 7) == 0 )
121 : {
122 56 : CurOut()
123 112 : >> *new Html::Link(i_sFullName)
124 56 : << i_sFullName;
125 : return;
126 : }
127 :
128 1559 : StringVector aModule_;
129 1559 : String sCe,
130 1559 : sMember;
131 1559 : int nSequence = 0;
132 1559 : String sTypeText;
133 1559 : csv::erase_container(aModule_);
134 :
135 : const ary::idl::Module *
136 1559 : pScopeModule = referingModule();
137 1559 : if (pScopeModule == 0)
138 : {
139 : // SYNTAX_ERR, but rather logical error: Missing module.
140 0 : CurOut() << i_sFullName;
141 : // KORR_FUTURE
142 : // How to put a message about this?
143 : // errorOut_UnresolvedLink(i_sFullName);
144 : return;
145 : }
146 :
147 1559 : const char * sTypeStart = strrchr(i_sFullName,'<');
148 1559 : if ( sTypeStart != 0 )
149 : {
150 0 : const char * sTypeEnd = strchr(i_sFullName,'>');
151 0 : if (sTypeEnd == 0)
152 : { // SYNTAX_ERR
153 0 : CurOut() << i_sFullName;
154 : // KORR_FUTURE
155 : // How to put a message about this?
156 : // errorOut_UnresolvedLink(i_sFullName);
157 : return;
158 : }
159 :
160 0 : nSequence = count_Sequences(i_sFullName);
161 0 : sTypeStart++;
162 0 : sTypeText.assign(sTypeStart, sTypeEnd-sTypeStart);
163 : }
164 : else
165 : {
166 1559 : sTypeText = i_sFullName;
167 : }
168 :
169 1559 : csv::erase_container(aModule_);
170 :
171 1559 : if (NOT ( Env().Data().Search_Ce(aModule_, sCe,sMember, sTypeText, *pScopeModule) ) )
172 : {
173 513 : if ( strchr(sTypeText,':') == 0
174 : AND
175 236 : *sTypeText.c_str() != 'X' ) // This is a HACK, make this correct!
176 : {
177 225 : Produce_LocalLinkInDocu(sTypeText);
178 : return;
179 : }
180 52 : CurOut() << i_sFullName;
181 : // KORR
182 : // How to put a message about this?
183 : // errorOut_UnresolvedLink(i_sFullName);
184 : return;
185 : }
186 :
187 1282 : produce_FromStd(aModule_, sCe, sMember, nSequence, exists_yes);
188 : }
189 :
190 : void
191 6612 : HF_IdlTypeText::Produce_LinkInDocu( const String & i_scope,
192 : const String & i_name,
193 : const String & i_member ) const
194 : {
195 6612 : StringVector aModule_;
196 6612 : String sName;
197 6612 : csv::erase_container(aModule_);
198 :
199 : const ary::idl::Module *
200 6612 : pScopeModule = referingModule();
201 6612 : if (pScopeModule == 0)
202 : {
203 : // SYNTAX_ERR, but rather logical error: Missing module.
204 0 : CurOut() << i_scope << "::" << i_name;
205 0 : if (NOT i_member.empty())
206 0 : CurOut() << "::" << i_member;
207 : return;
208 : }
209 :
210 6612 : if (NOT ( Env().Data().Search_CesModule( aModule_, i_scope, i_name, *pScopeModule) ) )
211 : {
212 191 : CurOut() << i_scope << "::" << i_name;
213 191 : if (NOT i_member.empty())
214 56 : CurOut() << "::" << i_member;
215 : return;
216 : }
217 6421 : produce_FromStd(aModule_, i_name, i_member, 0, exists_yes);
218 : }
219 :
220 : void
221 998 : HF_IdlTypeText::Produce_LocalLinkInDocu( const String & i_member ) const
222 : {
223 998 : StringVector aModule_;
224 998 : String sName;
225 998 : csv::erase_container(aModule_);
226 :
227 : csv_assert(referingCe() != 0);
228 998 : if ( referingModule() == Env().Linker().Search_CurModule() )
229 : {
230 998 : StreamLock slLink(200);
231 998 : if (referingCe()->SightLevel() == ary::idl::sl_Member)
232 : {
233 960 : slLink() << "#" << i_member;
234 : }
235 : else
236 : {
237 38 : slLink() << referingCe()->LocalName()
238 38 : << ".html#"
239 38 : << i_member;
240 : }
241 998 : CurOut()
242 2994 : >> *new Html::Link(slLink().c_str())
243 998 : << i_member;
244 1996 : return;
245 : }
246 :
247 0 : String sDummyMember;
248 0 : Env().Data().Get_CeText(aModule_, sName, sDummyMember, *referingCe());
249 0 : produce_FromStd(aModule_, sName, i_member, 0, exists_yes);
250 : }
251 :
252 : void
253 19526 : HF_IdlTypeText::Produce_IndexLink( Xml::Element & o_out,
254 : const client & i_ce ) const
255 : {
256 19526 : StringVector aModule_;
257 19526 : String sCe;
258 19526 : String sMember;
259 19526 : csv::erase_container(aModule_);
260 :
261 19526 : Out().Enter(o_out);
262 :
263 19526 : Env().Data().Get_CeText(aModule_, sCe, sMember, i_ce);
264 19526 : produce_IndexLink(aModule_, sCe, sMember, false);
265 :
266 19526 : Out().Leave();
267 19526 : }
268 :
269 : void
270 15274 : HF_IdlTypeText::Produce_IndexOwnerLink( Xml::Element & o_out,
271 : const client & i_owner ) const
272 : {
273 15274 : StringVector aModule_;
274 15274 : String sCe;
275 15274 : String sMember;
276 15274 : csv::erase_container(aModule_);
277 :
278 15274 : Out().Enter(o_out);
279 :
280 15274 : if (i_owner.Owner().IsValid())
281 : {
282 15274 : Env().Data().Get_CeText(aModule_, sCe, sMember, i_owner);
283 15274 : produce_IndexLink(aModule_, sCe, sMember, true);
284 : }
285 : else
286 : { // global namespace:
287 :
288 0 : CurOut()
289 0 : << "."
290 0 : >> *new Html::Link("../module-ix.html")
291 0 : << "global namespace";
292 : }
293 :
294 :
295 15274 : Out().Leave();
296 15274 : }
297 :
298 : void
299 4252 : HF_IdlTypeText::Produce_IndexSecondEntryLink( Xml::Element & o_out,
300 : const client & i_ce ) const
301 : {
302 4252 : StringVector aModule_;
303 4252 : String sCe;
304 4252 : String sMember;
305 4252 : csv::erase_container(aModule_);
306 :
307 4252 : Out().Enter(o_out);
308 :
309 4252 : Env().Data().Get_CeText(aModule_, sCe, sMember, i_ce);
310 4252 : produce_IndexLink(aModule_, sCe, sMember, true);
311 4252 : Out().Leave();
312 4252 : }
313 :
314 :
315 : void
316 47620 : HF_IdlTypeText::produce_FromStd( const StringVector & i_module,
317 : const String & i_ce,
318 : const String & i_member,
319 : int i_sequenceCount,
320 : E_Existence i_ceExists,
321 : const std::vector<ary::idl::Type_id> *
322 : i_templateParameters ) const
323 : {
324 47620 : if (i_ceExists == exists_no)
325 : {
326 10 : if ( is_ExternLink(i_module) )
327 : {
328 0 : produce_ExternLink(i_module,i_ce,i_member,i_sequenceCount,i_templateParameters);
329 47620 : return;
330 : }
331 10 : errorOut_UnresolvedLink(i_module, i_ce, i_member);
332 : }
333 :
334 : output::Node &
335 47620 : rCeNode = Env().OutputTree().Provide_Node(i_module);
336 : output::Position
337 47620 : aTargetPos(rCeNode);
338 : bool
339 47620 : bShowModule = rCeNode != Env().CurPosition().RelatedNode()
340 24211 : ? i_module.size() > 0
341 71831 : : false;
342 : bool
343 47620 : bUseMember = NOT i_member.empty();
344 : bool
345 47620 : bLink2Module = i_ceExists == exists_yes;
346 : bool
347 47620 : bLink2Ce = i_ceExists == exists_yes;
348 : bool
349 47620 : bLink2Member = NOT Env().Is_MemberExistenceCheckRequired()
350 47620 : AND i_ceExists == exists_yes;
351 : bool
352 47620 : bHasCeOrName = NOT i_ce.empty();
353 :
354 47620 : if (i_sequenceCount > 0)
355 626 : start_Sequence(i_sequenceCount);
356 :
357 47620 : StreamLock aLink(300);
358 47620 : StreamStr & rLink = aLink();
359 :
360 : // Produce output: module
361 47620 : if (bShowModule)
362 : {
363 24208 : int nMax = i_module.size() - 1;
364 24208 : int nCount = 0;
365 : StringVector::const_iterator
366 24208 : itm = i_module.begin();
367 100572 : for ( ;
368 : nCount < nMax;
369 : ++itm, ++nCount )
370 : {
371 76364 : CurOut() << "::" << *itm;
372 : }
373 :
374 24208 : CurOut() << "::";
375 24208 : if (bLink2Module)
376 : {
377 24201 : aTargetPos.Set_File(output::ModuleFileName());
378 24201 : Env().Linker().Get_Link2Position(rLink, aTargetPos);
379 24201 : CurOut()
380 72603 : >> *new Html::Link( rLink.c_str() )
381 48402 : << *itm;
382 24201 : rLink.reset();
383 : }
384 : else
385 : {
386 7 : CurOut() << *itm;
387 : }
388 :
389 24208 : if (bHasCeOrName)
390 24207 : CurOut() << "::";
391 : } // end if (bShowModule)
392 :
393 : // CodeEntity and member:
394 47620 : aTargetPos.Set_File( rLink << i_ce << ".html" << c_str );
395 47620 : rLink.reset();
396 :
397 47620 : if (bHasCeOrName)
398 : {
399 47616 : if (bLink2Ce)
400 : {
401 47606 : Env().Linker().Get_Link2Position(rLink, aTargetPos);
402 47606 : CurOut()
403 142818 : >> *new Html::Link(rLink.c_str())
404 47606 : << i_ce;
405 47606 : rLink.reset();
406 : }
407 : else
408 : {
409 10 : CurOut() << i_ce;
410 : }
411 :
412 47616 : if (i_templateParameters != 0)
413 15934 : write_TemplateParameterList(*i_templateParameters);
414 :
415 47616 : if (bUseMember)
416 : {
417 8767 : CurOut() << "::";
418 :
419 8767 : if (bLink2Member)
420 : {
421 8767 : bool bFunction = strstr(i_member,"()") != 0;
422 8767 : String sMember( i_member );
423 8767 : if (bFunction)
424 6450 : sMember.assign(i_member.c_str(), sMember.length()-2);
425 :
426 8767 : Env().Linker().Get_Link2Member(rLink, aTargetPos, sMember);
427 8767 : CurOut()
428 26301 : >> *new Html::Link(rLink.c_str())
429 8767 : << i_member;
430 8767 : rLink.reset();
431 : }
432 : else
433 : {
434 0 : CurOut()
435 0 : << i_member;
436 : }
437 : } // endif (bUseMember)
438 : } // endif (bHasCeOrName)
439 :
440 47620 : if (i_sequenceCount > 0)
441 626 : finish_Sequence(i_sequenceCount);
442 : }
443 :
444 : void
445 17289 : HF_IdlTypeText::produce_BuiltIn( const String & i_type,
446 : int i_sequenceCount ) const
447 : {
448 17289 : if (i_sequenceCount > 0)
449 515 : start_Sequence(i_sequenceCount);
450 17289 : CurOut() << i_type;
451 17289 : if (i_sequenceCount > 0)
452 515 : finish_Sequence(i_sequenceCount);
453 17289 : }
454 :
455 : void
456 39052 : HF_IdlTypeText::produce_IndexLink( const StringVector & i_module,
457 : const String & i_ce,
458 : const String & i_member,
459 : bool i_bIsOwner ) const
460 : {
461 : output::Node &
462 39052 : rCeNode = Env().OutputTree().Provide_Node(i_module);
463 : output::Position
464 39052 : aTargetPos(rCeNode);
465 : bool
466 39052 : bShowModule = i_bIsOwner OR (i_module.size() > 0 AND i_ce.empty());
467 : bool
468 39052 : bShowNonModule = NOT bShowModule OR (i_bIsOwner AND NOT i_ce.empty());
469 : bool
470 39052 : bUseMember = NOT i_member.empty();
471 :
472 39052 : StreamLock aLink(300);
473 39052 : StreamStr & rLink = aLink();
474 :
475 : // Produce output: module
476 39052 : if (bShowModule)
477 : {
478 19644 : if (i_bIsOwner)
479 : {
480 19526 : int nMax = bShowNonModule ? i_module.size() : i_module.size() - 1;
481 19526 : int nCount = 0;
482 100295 : for ( StringVector::const_iterator itm = i_module.begin();
483 : nCount < nMax;
484 : ++itm, ++nCount )
485 : {
486 80769 : CurOut() << "::" << *itm;
487 : }
488 19526 : CurOut() << ":: .";
489 : }
490 :
491 19644 : if (NOT bShowNonModule)
492 : {
493 236 : aTargetPos.Set_File(output::ModuleFileName());
494 236 : Env().Linker().Get_Link2Position(rLink, aTargetPos);
495 236 : CurOut()
496 708 : >> *new Html::Link( rLink.c_str() )
497 472 : >> *new Html::Bold
498 472 : << i_module.back();
499 236 : rLink.reset();
500 : }
501 : } // end if (bShowModule)
502 :
503 39052 : if (bShowNonModule)
504 : {
505 38816 : aTargetPos.Set_File( rLink << i_ce << ".html" << c_str );
506 38816 : rLink.reset();
507 :
508 38816 : if (bUseMember)
509 : {
510 15274 : bool bFunction = strstr(i_member,"()") != 0;
511 15274 : String sMember( i_member );
512 15274 : if (bFunction)
513 5595 : sMember.assign(i_member.c_str(), sMember.length()-2);
514 15274 : Env().Linker().Get_Link2Member(rLink, aTargetPos, sMember);
515 15274 : CurOut()
516 45822 : >> *new Html::Link(rLink.c_str())
517 30548 : >> *new Html::Bold
518 15274 : << i_member;
519 15274 : rLink.reset();
520 : }
521 : else
522 : {
523 23542 : Env().Linker().Get_Link2Position(rLink, aTargetPos);
524 23542 : if (i_bIsOwner)
525 : {
526 19408 : CurOut()
527 58224 : >> *new Html::Link(rLink.c_str())
528 19408 : << i_ce;
529 : }
530 : else
531 : {
532 4134 : CurOut()
533 12402 : >> *new Html::Link(rLink.c_str())
534 8268 : >> *new Html::Bold
535 4134 : << i_ce;
536 : }
537 23542 : rLink.reset();
538 : }
539 39052 : } // endif (bHasCeOrName)
540 39052 : }
541 :
542 : int
543 0 : HF_IdlTypeText::count_Sequences( const char * i_sFullType ) const
544 : {
545 0 : int ret = 0;
546 :
547 0 : for ( const char * pCount = i_sFullType;
548 : *pCount != 0;
549 : )
550 : {
551 0 : pCount = strstr(pCount,"sequence");
552 0 : if (pCount != 0)
553 : {
554 0 : pCount += sizeof("sequence"); // = strlen(sequence) + 1 for '<'.
555 0 : if ( *(pCount-1) == '\0' )
556 : {
557 : // SYNTAX_ERR
558 0 : return 0;
559 : }
560 0 : ++ret;
561 : }
562 : } // end for
563 :
564 0 : return ret;
565 : }
566 :
567 : void
568 1141 : HF_IdlTypeText::start_Sequence( int i_count ) const
569 : {
570 : csv_assert( i_count > 0 );
571 2335 : for (int i = 0; i < i_count; ++i )
572 : {
573 1194 : CurOut() << "sequence< ";
574 : }
575 1141 : }
576 :
577 : void
578 1141 : HF_IdlTypeText::finish_Sequence( int i_count ) const
579 : {
580 : csv_assert( i_count > 0 );
581 2335 : for (int i = 0; i < i_count; ++i )
582 : {
583 1194 : CurOut() << " >";
584 : }
585 1141 : }
586 :
587 : void
588 10 : HF_IdlTypeText::errorOut_UnresolvedLink( const char * i_name ) const
589 : {
590 10 : StreamLock slFile(1000);
591 :
592 : // KORR
593 : // Handle links in cited documentation from other entities.
594 10 : slFile() << Env().CurPageCe_AsText();
595 10 : slFile().pop_back(5);
596 10 : slFile() << ".idl";
597 :
598 : // KORR
599 : // Retrieve, correct line number.
600 10 : TheMessages().Out_UnresolvedLink( i_name,
601 10 : slFile().c_str(),
602 20 : 0 );
603 10 : }
604 :
605 : void
606 10 : HF_IdlTypeText::errorOut_UnresolvedLink( const StringVector & i_module,
607 : const String & i_ce,
608 : const String & i_member ) const
609 : {
610 10 : StreamLock slName(500);
611 :
612 10 : if (i_module.size() > 0)
613 : {
614 7 : slName().operator_join(i_module.begin(), i_module.end(), "::");
615 7 : if (NOT i_ce.empty())
616 7 : slName() << "::";
617 : }
618 10 : if (NOT i_ce.empty())
619 : {
620 10 : slName() << i_ce;
621 10 : if (NOT i_member.empty())
622 0 : slName() << "::" << i_member;
623 : }
624 10 : errorOut_UnresolvedLink(slName().c_str());
625 10 : }
626 :
627 : bool
628 10 : HF_IdlTypeText::is_ExternLink( const StringVector & i_module ) const
629 : {
630 : const autodoc::CommandLine &
631 10 : rCmdLine = autodoc::CommandLine::Get_();
632 10 : uintt nExtNspLength = rCmdLine.ExternNamespace().length();
633 10 : if (nExtNspLength == 0)
634 10 : return false;
635 :
636 0 : StreamStr s(1000);
637 0 : s << "::";
638 : s.operator_join( i_module.begin(),
639 : i_module.end(),
640 0 : "::" );
641 :
642 0 : if (s.length() < nExtNspLength)
643 0 : return false;
644 0 : return ( strncmp( rCmdLine.ExternNamespace().c_str(),
645 : s.c_str(),
646 0 : nExtNspLength ) == 0 );
647 : }
648 :
649 : void
650 0 : HF_IdlTypeText::produce_ExternLink( const StringVector & i_module,
651 : const String & i_ce,
652 : const String & i_member,
653 : int i_sequenceCount,
654 : const std::vector<ary::idl::Type_id> *
655 : i_templateParameters ) const
656 : {
657 : // KORR
658 : // Look again at this code and take some time.
659 :
660 0 : StreamLock aLink(1000);
661 0 : StreamStr & rLink = aLink();
662 :
663 0 : rLink << autodoc::CommandLine::Get_().ExternRoot();
664 : rLink.operator_join( i_module.begin(),
665 : i_module.end(),
666 0 : "/" );
667 0 : rLink << '/'
668 0 : << i_ce
669 0 : << ".html";
670 0 : if (i_member.length() > 0)
671 0 : rLink << "/#" << i_member;
672 :
673 0 : if (i_sequenceCount > 0)
674 0 : start_Sequence(i_sequenceCount);
675 :
676 : // module
677 0 : int nMax = i_module.size();
678 0 : int nCount = 0;
679 : StringVector::const_iterator
680 0 : itm = i_module.begin();
681 0 : for ( ;
682 : nCount < nMax;
683 : ++itm, ++nCount )
684 : {
685 0 : CurOut() << "::" << *itm;
686 : }
687 0 : CurOut() << "::";
688 :
689 :
690 : // CodeEntity
691 0 : if (i_member.length() == 0)
692 : {
693 0 : CurOut()
694 0 : >> *new Html::Link(rLink.c_str())
695 0 : << i_ce;
696 : }
697 : else
698 : {
699 0 : CurOut()
700 0 : << i_ce;
701 : }
702 :
703 0 : if (i_templateParameters != 0)
704 0 : write_TemplateParameterList(*i_templateParameters);
705 :
706 : // Member
707 0 : if (i_member.length() > 0)
708 : {
709 0 : CurOut()
710 0 : >> *new Html::Link(rLink.c_str())
711 0 : << i_member;
712 : }
713 :
714 0 : if (i_sequenceCount > 0)
715 0 : finish_Sequence(i_sequenceCount);
716 0 : }
717 :
718 : void
719 15934 : HF_IdlTypeText::write_TemplateParameterList(
720 : const std::vector<ary::idl::Type_id> & i_templateParameters ) const
721 : {
722 15934 : if (i_templateParameters.empty())
723 15934 : return;
724 :
725 : HF_IdlTypeText
726 20 : aTemplateParamWriter(Env(), CurOut(), pReferingCe);
727 20 : CurOut() << "< ";
728 : std::vector<ary::idl::Type_id>::const_iterator
729 20 : it = i_templateParameters.begin();
730 20 : aTemplateParamWriter.Produce_byData(*it);
731 27 : for ( ++it; it != i_templateParameters.end(); ++it )
732 : {
733 7 : CurOut() << ", ";
734 7 : aTemplateParamWriter.Produce_byData(*it);
735 : }
736 20 : CurOut() << " >";
737 3 : }
738 :
739 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|