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_linkhelper.hxx"
30 
31 
32 // NOT FULLY DEFINED SERVICES
33 #include <ary/idl/i_module.hxx>
34 
35 
36 
37 
38 const ary::idl::Module *
39 LinkHelper::Search_CurModule() const
40 {
41     return Search_Module( rEnv.CurPosition().RelatedNode() );
42 }
43 
44 const ary::idl::Module *
45 LinkHelper::Search_Module( output::Node & i_node ) const
46 {
47     static StringVector aNames_;
48 
49     output::Node::relative_id
50         nId = i_node.RelatedNameRoom();
51     if (nId == 0)
52     {
53         csv::erase_container(aNames_);
54         i_node.Get_Chain(aNames_);
55         const ary::idl::Module *  pModule =
56             rEnv.Data().Search_Module(aNames_);
57         if ( pModule == 0 )
58             return 0;
59         nId = static_cast<output::Node::relative_id>(pModule->Id());
60         rEnv.CurPosition().RelatedNode().Set_RelatedNameRoom(nId);
61     }
62 
63     return & rEnv.Data().Find_Module( ary::idl::Ce_id(nId) );
64 }
65 
66 namespace
67 {
68     const String C_sXrefsSuffix("-xref");
69 }
70 
71 
72 LinkHelper::OutPosition
73 LinkHelper::PositionOf_CurXRefs( const String & i_ceName ) const
74 {
75     StreamLock sl(100);
76     return OutPosition( rEnv.CurPosition(),
77                         sl()    << i_ceName
78 								<< C_sXrefsSuffix
79 								<< ".html"
80 								<< c_str );
81 }
82 
83 const String &
84 LinkHelper::XrefsSuffix() const
85 {
86     return C_sXrefsSuffix;
87 }
88 
89 
90 String
91 nameChainLinker( const char * )
92 {
93     static const String
94         sModuleFileName_( output::ModuleFileName() );
95     return sModuleFileName_;
96 }
97