1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 #include <precomp.h> 23 #include "hi_env.hxx" 24 25 26 // NOT FULLY DEFINED SERVICES 27 #include <cosv/ploc_dir.hxx> 28 #include <cfrstd.hxx> 29 #include <toolkit/out_tree.hxx> 30 #include "hi_ary.hxx" 31 #include "hi_linkhelper.hxx" 32 33 34 35 const String C_s_index_files("index-files"); 36 37 const String C_sUseFileSuffix("-use.html"); 38 const String C_IndexA_FileName("index-1.html"); 39 40 41 HtmlEnvironment_Idl::HtmlEnvironment_Idl( const csv::ploc::Path & i_rOutputDir, 42 const ary::idl::Gate & i_rGate, 43 const display::CorporateFrame & i_rLayout ) 44 : aOutputRoot(i_rOutputDir), 45 pData(new AryAccess(i_rGate)), 46 pGate(&i_rGate), 47 pOutputTree(new output::Tree), 48 aCurPosition(pOutputTree->Root()), 49 pCurPageCe(0), 50 pLayout(&i_rLayout), 51 pLinker() 52 { 53 StringVector aHelp; 54 pOutputTree->Set_NamesRoot(aHelp); 55 56 aHelp.push_back(output::IndexFilesDirName()); 57 pOutputTree->Set_IndexRoot(aHelp); 58 59 (*aHelp.begin()) = String("com"); 60 aHelp.push_back(String("sun")); 61 aHelp.push_back(String("star")); 62 pOutputTree->Set_Overview(aHelp, output::ModuleFileName() ); 63 64 pLinker = new LinkHelper(*this); 65 } 66 67 HtmlEnvironment_Idl::~HtmlEnvironment_Idl() 68 { 69 } 70 71 namespace 72 { 73 StringVector G_aChain; 74 } 75 76 void 77 HtmlEnvironment_Idl::Goto_Directory( output::Position i_pos, 78 bool i_bCreateDirectoryIfNecessary ) 79 { 80 aCurPosition = i_pos; 81 aCurPath = aOutputRoot.MyPath(); 82 83 aCurPosition.Get_Chain(G_aChain); 84 for ( StringVector::const_iterator it = G_aChain.begin(); 85 it != G_aChain.end(); 86 ++it ) 87 { 88 aCurPath.DirChain() += *it; 89 } 90 91 if (i_bCreateDirectoryIfNecessary) 92 create_Directory(aCurPath); 93 } 94 95 void 96 HtmlEnvironment_Idl::Goto_DirectoryLevelDown( const String & i_subDirName, 97 bool i_bCreateDirectoryIfNecessary ) 98 { 99 aCurPosition +=(i_subDirName); 100 101 aCurPath.SetFile(String::Null_()); 102 aCurPath.DirChain() += i_subDirName; 103 104 if (i_bCreateDirectoryIfNecessary) 105 create_Directory(aCurPath); 106 } 107 108 void 109 HtmlEnvironment_Idl::Goto_DirectoryLevelUp() 110 { 111 aCurPosition -= 1; 112 113 aCurPath.SetFile(String::Null_()); 114 aCurPath.DirChain() -= 1; 115 } 116 117 void 118 HtmlEnvironment_Idl::Set_CurFile( const String & i_fileName ) 119 { 120 aCurPath.SetFile(i_fileName); 121 } 122 123 void 124 HtmlEnvironment_Idl::create_Directory( const csv::ploc::Path & i_path ) 125 126 { 127 csv::ploc::Directory aCurDir(i_path); 128 if (NOT aCurDir.Exists()) 129 aCurDir.PhysicalCreate(); 130 } 131 132 inline bool 133 IsAbsoluteLink(const char * i_link) 134 { 135 const char 136 shttp[] = "http://"; 137 const char 138 sfile[] = "file://"; 139 const int 140 csize = sizeof shttp - 1; 141 csv_assert(csize == sizeof sfile - 1); 142 143 return strncmp(i_link,shttp,csize) == 0 144 OR strncmp(i_link,sfile,csize) == 0; 145 } 146 147 148 const char * 149 HtmlEnvironment_Idl::Link2Manual( const String & i_link ) const 150 { 151 if ( IsAbsoluteLink(i_link.c_str()) ) 152 return i_link; 153 154 static StreamStr aLink_(200); 155 aLink_.reset(); 156 String 157 sDvgRoot(pLayout->DevelopersGuideHtmlRoot()); 158 if (sDvgRoot.empty()) 159 sDvgRoot = "../DevelopersGuide"; 160 161 // KORR_FUTURE 162 // Enhance performance by calculating this only one time: 163 if ( NOT IsAbsoluteLink(sDvgRoot.c_str()) ) 164 aCurPosition.Get_LinkToRoot(aLink_); 165 aLink_ << sDvgRoot 166 << "/" 167 << i_link; 168 return aLink_.c_str(); 169 } 170 171 String 172 HtmlEnvironment_Idl::CurPageCe_AsText() const 173 { 174 return CurPageCe_AsFile(".html"); 175 } 176 177 String 178 HtmlEnvironment_Idl::CurPageCe_AsFile(const char * i_sEnding) const 179 { 180 if (pCurPageCe == 0) 181 return String::Null_(); 182 183 static StringVector aModule_; 184 String sCe; 185 String sDummy; 186 Data().Get_CeText(aModule_, sCe, sDummy, *pCurPageCe); 187 StreamLock slCe(500); 188 if (aModule_.size() > 0) 189 slCe().operator_join(aModule_.begin(), aModule_.end(), "/"); 190 if (NOT sCe.empty()) 191 slCe() << "/" << sCe << i_sEnding; 192 return String(slCe().c_str()); 193 } 194