xref: /AOO41X/main/autodoc/source/display/idl/hi_main.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #include <precomp.h>
29 #include "hi_main.hxx"
30 
31 
32 // NOT FULLY DEFINED SERVICES
33 #include <algorithm>
34 #include <cosv/ploc.hxx>
35 #include <cosv/file.hxx>
36 #include <ary/idl/i_ce.hxx>
37 #include <ary/idl/ik_ce.hxx>
38 #include <ary/idl/ik_enum.hxx>
39 #include <ary/idl/ik_typedef.hxx>
40 #include <ary/idl/ik_interface.hxx>
41 #include <ary/idl/ik_struct.hxx>
42 #include <ary/idl/ik_exception.hxx>
43 #include <ary/idl/i_constant.hxx>
44 #include <ary/idl/i_constgroup.hxx>
45 #include <ary/idl/i_enum.hxx>
46 #include <ary/idl/i_singleton.hxx>
47 #include <ary/idl/i_sisingleton.hxx>
48 #include <ary/idl/i_exception.hxx>
49 #include <ary/idl/i_interface.hxx>
50 #include <ary/idl/i_service.hxx>
51 #include <ary/idl/i_siservice.hxx>
52 #include <ary/idl/i_struct.hxx>
53 #include <ary/idl/i_typedef.hxx>
54 #include <ary/idl/i_module.hxx>
55 #include <cfrstd.hxx>
56 #include <toolkit/htmlfile.hxx>
57 #include <toolkit/out_position.hxx>
58 #include <toolkit/out_tree.hxx>
59 #include "hfi_constgroup.hxx"
60 #include "hfi_enum.hxx"
61 #include "hfi_globalindex.hxx"
62 #include "hfi_interface.hxx"
63 #include "hfi_module.hxx"
64 #include "hfi_struct.hxx"
65 #include "hfi_service.hxx"
66 #include "hfi_singleton.hxx"
67 #include "hfi_siservice.hxx"
68 #include "hfi_typedef.hxx"
69 #include "hfi_xrefpage.hxx"
70 #include "hi_env.hxx"
71 #include "hi_linkhelper.hxx"
72 
73 
74 using       ::ary::idl::Ce_id;
75 using       ::ary::idl::Type_id;
76 using       ::ary::idl::ifc_ce::Dyn_CeIterator;
77 
78 
79 
80 extern const String C_sCssFilename_Idl("idl.css");
81 
82 /*
83 typedef     ::ary::Dyn_StdConstIterator< ::ary::idl::CommentedRelation>
84             Dyn_ComRefIterator;
85 namespace   read_module     = ::ary::idl::ifc_module;
86 namespace   read_interface  = ::ary::idl::ifc_interface;
87 namespace   read_service    = ::ary::idl::ifc_service;
88 namespace   read_struct     = ::ary::idl::ifc_struct;
89 namespace   read_exception  = ::ary::idl::ifc_exception;
90 namespace   read_enum       = ::ary::idl::ifc_enum;
91 namespace   read_typedef    = ::ary::idl::ifc_typedef;
92 namespace   read_constgroup = ::ary::idl::ifc_constantsgroup;
93 */
94 
95 namespace
96 {
97 
98 /** @resp
99     Inits (constructor) and creates (destructor) the current
100     html documentation file ( MainDisplay_Idl.pMyFile ).
101 */
102 class Guard_CurFile
103 {
104   public:
105                         Guard_CurFile(          /// For CodeEntities
106                             DocuFile_Html &     io_client,
107                             HtmlEnvironment_Idl &
108                                                 io_env,
109                             const ary::idl::CodeEntity &
110                                                 i_ce,
111                             const String &      i_titlePrefix );
112                         Guard_CurFile(          /// For Use pages
113                             DocuFile_Html &     io_client,
114                             HtmlEnvironment_Idl &
115                                                 io_env,
116                             const String &      i_fileName,
117                             const String &      i_titlePrefix );
118                         Guard_CurFile(          /// For Modules
119                             DocuFile_Html &     io_client,
120                             HtmlEnvironment_Idl &
121                                                 io_env,
122                             const ary::idl::CodeEntity &
123                                                 i_ce );
124                         Guard_CurFile(          /// For Indices
125                             DocuFile_Html &     io_client,
126                             HtmlEnvironment_Idl &
127                                                 io_env,
128                             char                i_letter );
129                         ~Guard_CurFile();
130   private:
131     DocuFile_Html &     rClient;
132     HtmlEnvironment_Idl &
133                         rEnv;
134 
135 };
136 
137 /** @resp
138     Sets and releases the current factory pointer
139     ( MainDisplay_Idl.pCurFactory ).
140 */
141 class Guard_CurFactoryPtr
142 {
143   public:
144                         Guard_CurFactoryPtr(
145                             HtmlFactory_Idl *&  io_client,
146                             HtmlFactory_Idl &   i_factory )
147                             :   rpClient(io_client)
148                         { rpClient = &i_factory; }
149 
150                         ~Guard_CurFactoryPtr()
151                         { rpClient = 0; }
152 
153   private:
154     HtmlFactory_Idl *&  rpClient;
155 
156 };
157 
158 
159 Guard_CurFile::Guard_CurFile( DocuFile_Html &               io_client,
160                               HtmlEnvironment_Idl &         io_env,
161                               const ary::idl::CodeEntity &  i_ce,
162                               const String &                i_titlePrefix )
163     :   rClient(io_client),
164         rEnv(io_env)
165 {   // For Ces
166     StreamLock sl(300);
167     io_env.Set_CurFile( sl()    << i_ce.LocalName()
168                                 << ".html"
169                                 << c_str );
170     StreamLock aCurFilePath(700);
171     io_env.Get_CurFilePath(aCurFilePath());
172 
173     rClient.EmptyBody();
174     csv::ploc::Path
175         aLocation(aCurFilePath().c_str());
176     rClient.SetLocation(aLocation);
177     sl().reset();
178     rClient.SetTitle( sl()  << i_titlePrefix
179                             << " "
180                             << i_ce.LocalName()
181                             << c_str );
182     sl().reset();
183     rClient.SetRelativeCssPath(
184                       sl()  << io_env.CurPosition().LinkToRoot()
185                             << C_sCssFilename_Idl
186                             << c_str );
187 
188     io_env.Set_CurPageCe(&i_ce);
189 }
190 
191 Guard_CurFile::Guard_CurFile( DocuFile_Html &       io_client,
192                               HtmlEnvironment_Idl & io_env,
193                               const String &        i_fileName,
194                               const String &        i_titlePrefix )
195     :   rClient(io_client),
196         rEnv(io_env)
197 {   // For Use pages
198     StreamLock sl(300);
199     io_env.Set_CurFile( sl()    << i_fileName
200                                 << ".html"
201                                 << c_str );
202     StreamLock aCurFilePath(700);
203     io_env.Get_CurFilePath(aCurFilePath());
204     csv::ploc::Path
205         aLocation(aCurFilePath().c_str());
206 
207     rClient.EmptyBody();
208     rClient.SetLocation(aLocation);
209     sl().reset();
210     rClient.SetTitle( sl() << i_titlePrefix << " " << i_fileName << c_str );
211     sl().reset();
212     rClient.SetRelativeCssPath(
213                       sl()  << io_env.CurPosition().LinkToRoot()
214                             << C_sCssFilename_Idl
215                             << c_str );
216 
217     io_env.Set_CurPageCe(0);
218 }
219 
220 Guard_CurFile::Guard_CurFile( DocuFile_Html &               io_client,
221                               HtmlEnvironment_Idl &         io_env,
222                               const ary::idl::CodeEntity &  i_ce )
223     :   rClient(io_client),
224         rEnv(io_env)
225 {   // For Modules
226     io_env.Set_CurFile( output::ModuleFileName() );
227     StreamLock aCurFilePath(700);
228     io_env.Get_CurFilePath(aCurFilePath());
229     csv::ploc::Path
230         aLocation(aCurFilePath().c_str());
231 
232     rClient.EmptyBody();
233     rClient.SetLocation(aLocation);
234     StreamLock sl(300);
235     rClient.SetTitle( sl() << "Module " << io_env.CurPosition().Name() << c_str );
236     sl().reset();
237     rClient.SetRelativeCssPath(
238                       sl()  << io_env.CurPosition().LinkToRoot()
239                             << C_sCssFilename_Idl
240                             << c_str );
241 
242     io_env.Set_CurPageCe(&i_ce);
243 }
244 
245 Guard_CurFile::Guard_CurFile( DocuFile_Html &       io_client,
246                               HtmlEnvironment_Idl & io_env,
247                               char                  i_letter )
248     :   rClient(io_client),
249         rEnv(io_env)
250 {   // For Index pages
251     StreamLock sl(300);
252     io_env.Set_CurFile( sl()    << "index-"
253                                 << ( i_letter != '_'
254                                         ?   int(i_letter)-'a'+1
255                                         :   27 )
256                                 << ".html"
257                                 << c_str );
258     StreamLock aCurFilePath(700);
259     io_env.Get_CurFilePath(aCurFilePath());
260     csv::ploc::Path
261         aLocation(aCurFilePath().c_str());
262 
263     rClient.EmptyBody();
264     rClient.SetLocation(aLocation);
265     sl().reset();
266     rClient.SetTitle( sl() << "Global Index "
267                            << ( i_letter != '_'
268                                     ?   char(i_letter-'a'+'A')
269                                     :   '_' )
270                            << c_str );
271     sl().reset();
272     rClient.SetRelativeCssPath(
273                       sl()  << "../"
274                             << C_sCssFilename_Idl
275                             << c_str );
276 }
277 
278 Guard_CurFile::~Guard_CurFile()
279 {
280     rClient.CreateFile();
281     rEnv.Set_CurPageCe(0);
282 }
283 
284 
285 }   // anonymous namespace
286 
287 
288 
289 
290 MainDisplay_Idl::MainDisplay_Idl( HtmlEnvironment_Idl & io_rEnv )
291     :   pEnv(&io_rEnv),
292         pMyFile(new DocuFile_Html),
293         pCurFactory(0)
294 {
295 //  pMyFile->SetStyle( Env().Layout().CssStyle() );
296     pMyFile->SetCopyright( Env().Layout().CopyrightText() );
297 }
298 
299 MainDisplay_Idl::~MainDisplay_Idl()
300 {
301 }
302 
303 
304 void
305 MainDisplay_Idl::WriteGlobalIndices()
306 {
307     for ( const char * pLetter = "abcdefghijklmnopqrstuvwxyz_X"; *pLetter != 'X'; ++pLetter )
308     {
309         Guard_CurFile       gFile( *pMyFile, Env(), *pLetter );
310 
311         HF_IdlGlobalIndex   aFactory( *pEnv, pMyFile->Body() );
312         Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
313 
314         aFactory.Produce_Page( ary::idl::alphabetical_index::E_Letter(*pLetter) );
315     }	// end for
316 }
317 
318 
319 void
320 MainDisplay_Idl::do_Process( const ary::idl::Module & i_ce )
321 {
322     Guard_CurFile    gFile( *pMyFile,
323                             Env(),
324                             i_ce );
325     HF_IdlModule     aFactory( *pEnv, pMyFile->Body() );
326     Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
327 
328     aFactory.Produce_byData(i_ce);
329 }
330 
331 void
332 MainDisplay_Idl::do_Process( const ary::idl::Interface & i_ce )
333 {
334     do_InterfaceDescr(i_ce);
335     do_Interface2s(i_ce);
336 }
337 
338 void
339 MainDisplay_Idl::do_Process( const ary::idl::Service & i_ce )
340 {
341     do_ServiceDescr(i_ce);
342     do_Service2s(i_ce);
343 }
344 
345 void
346 MainDisplay_Idl::do_Process( const ary::idl::SglIfcService & i_ce )
347 {
348     do_SglIfcServiceDescr(i_ce);
349 }
350 
351 void
352 MainDisplay_Idl::do_Process( const ary::idl::Struct & i_ce )
353 {
354     do_StructDescr(i_ce);
355     do_Struct2s(i_ce);
356 }
357 
358 void
359 MainDisplay_Idl::do_Process( const ary::idl::Exception & i_ce )
360 {
361     do_ExceptionDescr(i_ce);
362     do_Exception2s(i_ce);
363 }
364 
365 void
366 MainDisplay_Idl::do_Process( const ary::idl::Enum & i_ce )
367 {
368     do_EnumDescr(i_ce);
369     do_Enum2s(i_ce);
370 }
371 
372 void
373 MainDisplay_Idl::do_Process( const ary::idl::Typedef & i_ce )
374 {
375     do_TypedefDescr(i_ce);
376     do_Typedef2s(i_ce);
377 }
378 
379 void
380 MainDisplay_Idl::do_Process( const ary::idl::ConstantsGroup & i_ce )
381 {
382     Guard_CurFile       gFile( *pMyFile,
383                                Env(),
384                                i_ce,
385                                "Constants' Group" );
386     HF_IdlConstGroup    aFactory( *pEnv, pMyFile->Body() );
387     Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
388 
389     aFactory.Produce_byData(i_ce);
390 }
391 
392 void
393 MainDisplay_Idl::do_Process( const ary::idl::Singleton & i_ce )
394 {
395     Guard_CurFile       gFile( *pMyFile,
396                                Env(),
397                                i_ce,
398                                "Singleton" );
399     HF_IdlSingleton     aFactory( *pEnv, pMyFile->Body() );
400     Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
401 
402     aFactory.Produce_byData_ServiceBased(i_ce);
403 }
404 
405 void
406 MainDisplay_Idl::do_Process( const ary::idl::SglIfcSingleton & i_ce )
407 {
408     Guard_CurFile       gFile( *pMyFile,
409                                Env(),
410                                i_ce,
411                                "Singleton" );
412     HF_IdlSingleton     aFactory( *pEnv, pMyFile->Body() );
413     Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
414 
415     aFactory.Produce_byData_InterfaceBased(i_ce);
416 }
417 
418 void
419 MainDisplay_Idl::do_InterfaceDescr( const ary::idl::CodeEntity & i_ce )
420 {
421     Guard_CurFile       gFile( *pMyFile,
422                                Env(),
423                                i_ce,
424                                "Interface" );
425     HF_IdlInterface     aInterface( *pEnv, pMyFile->Body() );
426     Guard_CurFactoryPtr gFactory(pCurFactory,aInterface);
427 
428     aInterface.Produce_byData(i_ce);
429 }
430 
431 void
432 MainDisplay_Idl::do_ServiceDescr( const ary::idl::CodeEntity & i_ce )
433 {
434     Guard_CurFile       gFile( *pMyFile,
435                                Env(),
436                                i_ce,
437                                "Service" );
438     HF_IdlService       aFactory( *pEnv, pMyFile->Body() );
439     Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
440 
441     aFactory.Produce_byData(i_ce);
442 }
443 
444 void
445 MainDisplay_Idl::do_SglIfcServiceDescr( const ary::idl::CodeEntity & i_ce )
446 {
447     Guard_CurFile       gFile( *pMyFile,
448                                Env(),
449                                i_ce,
450                                "Service" );
451     HF_IdlSglIfcService aFactory( *pEnv, pMyFile->Body() );
452     Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
453 
454     aFactory.Produce_byData(i_ce);
455 }
456 
457 void
458 MainDisplay_Idl::do_StructDescr( const ary::idl::CodeEntity & i_ce )
459 {
460     Guard_CurFile       gFile( *pMyFile,
461                                Env(),
462                                i_ce,
463                                "Struct" );
464     HF_IdlStruct        aFactory( *pEnv, pMyFile->Body(), false );
465     Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
466 
467     aFactory.Produce_byData(i_ce);
468 }
469 
470 void
471 MainDisplay_Idl::do_ExceptionDescr( const ary::idl::CodeEntity & i_ce )
472 {
473     Guard_CurFile       gFile( *pMyFile,
474                                Env(),
475                                i_ce,
476                                "Exception" );
477     HF_IdlStruct        aFactory( *pEnv, pMyFile->Body(), true );
478     Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
479 
480     aFactory.Produce_byData(i_ce);
481 }
482 
483 void
484 MainDisplay_Idl::do_EnumDescr( const ary::idl::CodeEntity & i_ce )
485 {
486     Guard_CurFile       gFile( *pMyFile,
487                                Env(),
488                                i_ce,
489                                "Enum" );
490     HF_IdlEnum        aFactory( *pEnv, pMyFile->Body() );
491     Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
492 
493     aFactory.Produce_byData(i_ce);
494 }
495 
496 void
497 MainDisplay_Idl::do_TypedefDescr( const ary::idl::CodeEntity & i_ce )
498 {
499     Guard_CurFile       gFile( *pMyFile,
500                                Env(),
501                                i_ce,
502                                "Typedef" );
503     HF_IdlTypedef       aFactory( *pEnv, pMyFile->Body() );
504     Guard_CurFactoryPtr gFactory(pCurFactory,aFactory);
505 
506     aFactory.Produce_byData(i_ce);
507 }
508 
509 void
510 MainDisplay_Idl::do_Interface2s( const ary::idl::CodeEntity & i_ce )
511 {
512     StreamLock sl(100);
513     String sUsesFileName(
514                 sl()
515                     << i_ce.LocalName()
516                     << Env().Linker().XrefsSuffix()
517                     << c_str );
518     Guard_CurFile       gFile( *pMyFile,
519                                Env(),
520                                sUsesFileName,
521                                "Uses of Interface" );
522     HF_IdlXrefs         aUses( *pEnv,
523                                pMyFile->Body(),
524                                C_sCePrefix_Interface,
525                                i_ce );
526 
527 
528     aUses.Produce_Tree(
529         "Derived Interfaces",
530         "#Deriveds",
531         i_ce,
532         &ary::idl::ifc_interface::xref::Get_Derivations );
533 
534     Dyn_CeIterator  pXrefList;
535 
536     ary::idl::ifc_interface::xref::Get_SynonymTypedefs(pXrefList,i_ce);
537     aUses.Produce_List(
538         "Synonym Typedefs",
539         "#Synonyms",
540         *pXrefList );
541     ary::idl::ifc_interface::xref::Get_ExportingServices(pXrefList,i_ce);
542     aUses.Produce_List(
543         "Services which Support this Interface",
544         "#SupportingServices",
545         *pXrefList );
546     ary::idl::ifc_interface::xref::Get_ExportingSingletons(pXrefList,i_ce);
547     aUses.Produce_List(
548         "Singletons which Support this Interface",
549         "#SupportingSingletons",
550         *pXrefList );
551     ary::idl::ifc_interface::xref::Get_AsReturns(pXrefList,i_ce);
552     aUses.Produce_List(
553         "Uses as Return Type",
554         "#Returns",
555         *pXrefList );
556     ary::idl::ifc_interface::xref::Get_AsParameters(pXrefList,i_ce);
557     aUses.Produce_List(
558         "Uses as Parameter",
559         "#Parameters",
560         *pXrefList );
561     ary::idl::ifc_interface::xref::Get_AsDataTypes(pXrefList,i_ce);
562     aUses.Produce_List(
563         "Uses as Data Type",
564         "#DataTypes",
565         *pXrefList );
566     aUses.Write_ManualLinks(i_ce);
567 }
568 
569 void
570 MainDisplay_Idl::do_Service2s( const ary::idl::CodeEntity & i_ce )
571 {
572     StreamLock sl(100);
573     String sUsesFileName(
574                 sl()
575                     << i_ce.LocalName()
576                     << Env().Linker().XrefsSuffix()
577                     << c_str );
578     Guard_CurFile   gFile(  *pMyFile,
579                             Env(),
580                             sUsesFileName,
581                             "Uses of Service" );
582     HF_IdlXrefs     aUses(  *pEnv,
583                             pMyFile->Body(),
584                             C_sCePrefix_Service,
585                             i_ce );
586     Dyn_CeIterator  pXrefList;
587     ary::idl::ifc_service::xref::Get_IncludingServices(pXrefList,i_ce);
588     aUses.Produce_List(
589         "Services which Include this Service",
590         "#IncludingServices",
591         *pXrefList );
592 
593     ary::idl::ifc_service::xref::Get_InstantiatingSingletons(pXrefList,i_ce);
594     aUses.Produce_List(
595         "Singletons which Instantiate this Service",
596         "#Singletons",
597         *pXrefList );
598     aUses.Write_ManualLinks(i_ce);
599 }
600 
601 void
602 MainDisplay_Idl::do_Struct2s( const ary::idl::CodeEntity & i_ce )
603 {
604     StreamLock sl(100);
605     String sUsesFileName(
606                 sl()
607                     << i_ce.LocalName()
608                     << Env().Linker().XrefsSuffix()
609                     << c_str );
610     Guard_CurFile   gFile(  *pMyFile,
611                             Env(),
612                             sUsesFileName,
613                             "Uses of Struct" );
614     HF_IdlXrefs     aUses(  *pEnv,
615                             pMyFile->Body(),
616                             C_sCePrefix_Struct,
617                             i_ce );
618 
619     aUses.Produce_Tree(
620         "Derived Structs",
621         "#Deriveds",
622         i_ce,
623         &ary::idl::ifc_struct::xref::Get_Derivations );
624 
625     Dyn_CeIterator  pXrefList;
626 
627     ary::idl::ifc_struct::xref::Get_SynonymTypedefs(pXrefList,i_ce);
628     aUses.Produce_List(
629         "Synonym Typedefs",
630         "#Synonyms",
631         *pXrefList );
632     ary::idl::ifc_struct::xref::Get_AsReturns(pXrefList,i_ce);
633     aUses.Produce_List(
634         "Uses as Return Type",
635         "#Returns",
636         *pXrefList );
637     ary::idl::ifc_struct::xref::Get_AsParameters(pXrefList,i_ce);
638     aUses.Produce_List(
639         "Uses as Parameter",
640         "#Parameters",
641         *pXrefList );
642     ary::idl::ifc_struct::xref::Get_AsDataTypes(pXrefList,i_ce);
643     aUses.Produce_List(
644         "Uses as Data Type",
645         "#DataTypes",
646         *pXrefList );
647     aUses.Write_ManualLinks(i_ce);
648 }
649 
650 void
651 MainDisplay_Idl::do_Exception2s( const ary::idl::CodeEntity & i_ce )
652 {
653     StreamLock sl(100);
654     String sUsesFileName(
655                 sl()
656                     << i_ce.LocalName()
657                     << Env().Linker().XrefsSuffix()
658                     << c_str );
659     Guard_CurFile   gFile(  *pMyFile,
660                             Env(),
661                             sUsesFileName,
662                             "Uses of Exception" );
663     HF_IdlXrefs     aUses(  *pEnv,
664                             pMyFile->Body(),
665                             C_sCePrefix_Exception,
666                             i_ce );
667 
668     aUses.Produce_Tree(
669         "Derived Exceptions",
670         "#Deriveds",
671         i_ce,
672         &ary::idl::ifc_exception::xref::Get_Derivations );
673 
674     Dyn_CeIterator  pXrefList;
675 
676     ary::idl::ifc_exception::xref::Get_RaisingFunctions(pXrefList,i_ce);
677     aUses.Produce_List(
678         "Raising Functions",
679         "#Raisers",
680         *pXrefList );
681     aUses.Write_ManualLinks(i_ce);
682 }
683 
684 void
685 MainDisplay_Idl::do_Enum2s( const ary::idl::CodeEntity & i_ce )
686 {
687     StreamLock sl(100);
688     String sUsesFileName(
689                 sl()
690                     << i_ce.LocalName()
691                     << Env().Linker().XrefsSuffix()
692                     << c_str );
693     Guard_CurFile   gFile(  *pMyFile,
694                             Env(),
695                             sUsesFileName,
696                             "Uses of Enum" );
697     HF_IdlXrefs     aUses(  *pEnv,
698                             pMyFile->Body(),
699                             C_sCePrefix_Enum,
700                             i_ce );
701     Dyn_CeIterator  pXrefList;
702     ary::idl::ifc_enum::xref::Get_SynonymTypedefs(pXrefList,i_ce);
703     aUses.Produce_List(
704         "Synonym Typedefs",
705         "#Synonyms",
706         *pXrefList );
707     ary::idl::ifc_enum::xref::Get_AsReturns(pXrefList,i_ce);
708     aUses.Produce_List(
709         "Uses as Return Type",
710         "#Returns",
711         *pXrefList );
712     ary::idl::ifc_enum::xref::Get_AsParameters(pXrefList,i_ce);
713     aUses.Produce_List(
714         "Uses as Parameter",
715         "#Parameters",
716         *pXrefList );
717     ary::idl::ifc_enum::xref::Get_AsDataTypes(pXrefList,i_ce);
718     aUses.Produce_List(
719         "Uses as Data Type",
720         "#DataTypes",
721         *pXrefList );
722     aUses.Write_ManualLinks(i_ce);
723 }
724 
725 void
726 MainDisplay_Idl::do_Typedef2s( const ary::idl::CodeEntity & i_ce )
727 {
728     StreamLock sl(100);
729     String sUsesFileName(
730                sl() << i_ce.LocalName()
731                     << Env().Linker().XrefsSuffix()
732                     << c_str );
733     Guard_CurFile   gFile(  *pMyFile,
734                             Env(),
735                             sUsesFileName,
736                             "Uses of Typedef" );
737     HF_IdlXrefs     aUses(  *pEnv,
738                             pMyFile->Body(),
739                             C_sCePrefix_Typedef,
740                             i_ce );
741     Dyn_CeIterator  pXrefList;
742     ary::idl::ifc_typedef::xref::Get_SynonymTypedefs(pXrefList,i_ce);
743     aUses.Produce_List(
744         "Synonym Typedefs",
745         "#Synonyms",
746         *pXrefList );
747     ary::idl::ifc_typedef::xref::Get_AsReturns(pXrefList,i_ce);
748     aUses.Produce_List(
749         "Uses as Return Type",
750         "#Returns",
751         *pXrefList );
752     ary::idl::ifc_typedef::xref::Get_AsParameters(pXrefList,i_ce);
753     aUses.Produce_List(
754         "Uses as Parameter",
755         "#Parameters",
756         *pXrefList );
757     ary::idl::ifc_typedef::xref::Get_AsDataTypes(pXrefList,i_ce);
758     aUses.Produce_List(
759         "Uses as Data Type",
760         "#DataTypes",
761         *pXrefList );
762     aUses.Write_ManualLinks(i_ce);
763 }
764 
765