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 "hi_factory.hxx"
22 :
23 :
24 : // NOT FULLY DEFINED SERVICES
25 : #include <ary/idl/i_ce.hxx>
26 : #include <toolkit/hf_title.hxx>
27 : #include "hfi_doc.hxx"
28 : #include "hfi_navibar.hxx"
29 : #include "hfi_tag.hxx"
30 : #include "hfi_typetext.hxx"
31 : #include "hi_linkhelper.hxx"
32 :
33 :
34 : extern const String
35 1 : C_sCellStyle_SummaryLeft("imsum_left");
36 : extern const String
37 1 : C_sCellStyle_SummaryRight("imsum_right");
38 : extern const String
39 1 : C_sCellStyle_MDetail("imdetail");
40 : extern const String
41 1 : C_sMemberTitle("membertitle");
42 :
43 :
44 : namespace
45 : {
46 :
47 : const char C_sSpace[92] = " "
48 : " "
49 : " ";
50 : }
51 :
52 :
53 : void
54 12108 : HtmlFactory_Idl::produce_SummaryDeclaration( Xml::Element & o_row,
55 : const client & i_ce ) const
56 : {
57 12108 : produce_InternalLink(o_row, i_ce);
58 12108 : }
59 :
60 : void
61 12108 : HtmlFactory_Idl::produce_InternalLink( Xml::Element & o_screen,
62 : const client & i_ce ) const
63 : {
64 12108 : StreamLock aLocalLink(100);
65 12108 : aLocalLink() << "#" << i_ce.LocalName();
66 :
67 : o_screen
68 12108 : >> *new Html::TableCell
69 24216 : << new Html::ClassAttr( C_sCellStyle_SummaryLeft )
70 36324 : >> *new Html::Link( aLocalLink().c_str() )
71 36324 : << i_ce.LocalName();
72 12108 : }
73 :
74 : void
75 15274 : HtmlFactory_Idl::produce_ShortDoc( Xml::Element & o_screen,
76 : const client & i_ce ) const
77 : {
78 : Xml::Element &
79 : rDetailsRowCell = o_screen
80 15274 : >> *new Html::TableCell
81 30548 : << new Html::ClassAttr( C_sCellStyle_SummaryRight );
82 : HF_IdlShortDocu
83 15274 : aLinkDoc(Env(), rDetailsRowCell);
84 15274 : aLinkDoc.Produce_byData( i_ce );
85 :
86 15274 : rDetailsRowCell << new Xml::XmlCode(" ");
87 15274 : }
88 :
89 : // KORR_FUTURE: Does not belong here (implementation inheritance)!
90 : void
91 624 : HtmlFactory_Idl::produce_Bases( Xml::Element & o_screen,
92 : const client & i_ce,
93 : const String & i_sLabel ) const
94 : {
95 624 : ary::idl::Type_id nBaseT = baseOf(i_ce);
96 624 : if ( nBaseT.IsValid() )
97 : {
98 : HF_DocEntryList
99 338 : aDocList( o_screen );
100 338 : aDocList.Produce_Term(i_sLabel);
101 :
102 338 : int nDepth = 0;
103 : Xml::Element &
104 338 : rBaseList = aDocList.Produce_Definition()
105 676 : >> *new Xml::AnElement("pre")
106 676 : << new Xml::AnAttribute("style","font-family:monospace;");
107 : rBaseList
108 338 : >> *new Html::Strong
109 676 : << i_ce.LocalName();
110 : rBaseList
111 338 : << "\n";
112 : recursive_ShowBases( rBaseList,
113 : nBaseT,
114 338 : nDepth );
115 : }
116 624 : }
117 :
118 : void
119 5187 : HtmlFactory_Idl::produce_Members( ce_list & it_list,
120 : const String & i_summaryTitle,
121 : const String & i_summaryLabel,
122 : const String & i_detailsTitle,
123 : const String & i_detailsLabel,
124 : const E_MemberViewType i_viewType ) const
125 : {
126 : csv_assert( it_list );
127 :
128 5187 : Dyn< HF_SubTitleTable > pSummary;
129 5187 : if ( ( i_viewType == viewtype_summary )
130 : || ( i_viewType == viewtype_complete )
131 : )
132 : {
133 : pSummary = new HF_SubTitleTable(
134 3130 : CurOut(),
135 : i_summaryLabel,
136 : i_summaryTitle,
137 3130 : 2 );
138 : }
139 :
140 5187 : Dyn< HF_SubTitleTable > pDetails;
141 5187 : if ( ( i_viewType == viewtype_details )
142 : || ( i_viewType == viewtype_complete )
143 : )
144 : {
145 : pDetails = new HF_SubTitleTable(
146 3130 : CurOut(),
147 : i_detailsLabel,
148 : i_detailsTitle,
149 3130 : 1 );
150 : }
151 :
152 29642 : for ( ; it_list.operator bool(); ++it_list )
153 : {
154 : const ary::idl::CodeEntity &
155 24455 : rCe = Env().Data().Find_Ce(*it_list);
156 :
157 24455 : if ( pSummary )
158 : {
159 : Xml::Element &
160 15274 : rSummaryRow = pSummary->Add_Row();
161 15274 : produce_SummaryDeclaration(rSummaryRow, rCe);
162 : // produce_InternalLink(rSummaryRow, rCe);
163 15274 : produce_ShortDoc(rSummaryRow, rCe);
164 : }
165 :
166 24455 : if ( pDetails )
167 15274 : produce_MemberDetails(*pDetails, rCe);
168 5187 : }
169 5187 : }
170 :
171 : void
172 3510 : HtmlFactory_Idl::produce_Title( HF_TitleTable & o_title,
173 : const String & i_label,
174 : const client & i_ce ) const
175 : {
176 : StreamLock
177 3510 : slAnnotations(200);
178 3510 : get_Annotations(slAnnotations(), i_ce);
179 : StreamLock
180 3510 : slTitle(200);
181 3510 : slTitle() << i_label << " " << i_ce.LocalName();
182 3510 : o_title.Produce_Title( slAnnotations().c_str(),
183 7020 : slTitle().c_str() );
184 3510 : }
185 :
186 : void
187 4134 : HtmlFactory_Idl::get_Annotations( StreamStr & o_out,
188 : const client & i_ce ) const
189 : {
190 : const ary::doc::OldIdlDocu *
191 4134 : doc = Get_IdlDocu(i_ce.Docu());
192 4134 : if (doc != 0)
193 : {
194 2732 : if (doc->IsDeprecated())
195 0 : o_out << "deprecated ";
196 2732 : if (NOT doc->IsPublished())
197 56 : o_out << "unpublished ";
198 : }
199 :
200 : // KORR
201 : // Need to display "unpublished", if there is no docu.
202 4134 : }
203 :
204 : void
205 19527 : HtmlFactory_Idl::write_Docu( Xml::Element & o_screen,
206 : const client & i_ce ) const
207 : {
208 : const ary::doc::OldIdlDocu *
209 19527 : doc = Get_IdlDocu(i_ce.Docu());
210 19527 : if (doc != 0)
211 : {
212 : HF_DocEntryList
213 16635 : aDocuList( o_screen );
214 : HF_IdlDocu
215 16635 : aDocu( Env(), aDocuList );
216 16635 : aDocu.Produce_fromCodeEntity(i_ce);
217 : }
218 :
219 19527 : write_ManualLinks(o_screen, i_ce);
220 19527 : }
221 :
222 : void
223 19527 : HtmlFactory_Idl::write_ManualLinks( Xml::Element & o_screen,
224 : const client & i_ce ) const
225 : {
226 : const StringVector &
227 19527 : rLinks2Descrs = i_ce.Secondaries().Links2DescriptionInManual();
228 19527 : if ( rLinks2Descrs.empty() )
229 19527 : return;
230 :
231 : o_screen
232 828 : >> *new Html::Label(C_sLocalManualLinks.c_str()+1) // Leave out the leading '#'.
233 414 : << " ";
234 : HF_DocEntryList
235 414 : aDocuList( o_screen );
236 414 : aDocuList.Produce_Term("Developers Guide");
237 : csv_assert(rLinks2Descrs.size() % 2 == 0);
238 2985 : for ( StringVector::const_iterator it = rLinks2Descrs.begin();
239 1990 : it != rLinks2Descrs.end();
240 : ++it )
241 : {
242 : Xml::Element &
243 581 : rLink = aDocuList.Produce_Definition() >> *new Html::Link( Env().Link2Manual(*it));
244 581 : if ( (*(it+1)).empty() )
245 : // HACK KORR_FUTURE
246 : // Research what happens with manual links which contain normal characters
247 : // in non-utf-8 texts. And research, why utfF-8 does not work here.
248 0 : rLink << new Xml::XmlCode(*it);
249 : else
250 581 : rLink << new Xml::XmlCode( *(it+1) );
251 581 : ++it;
252 414 : } // end for
253 : }
254 :
255 : void
256 0 : HtmlFactory_Idl::produce_MemberDetails( HF_SubTitleTable & ,
257 : const client & ) const
258 : {
259 : // Dummy, which does not need to do anything.
260 0 : }
261 :
262 : void
263 526 : HtmlFactory_Idl::recursive_ShowBases( Xml::Element & o_screen,
264 : type_id i_baseType,
265 : int & io_nDepth ) const
266 : {
267 : // Show this base
268 526 : ++io_nDepth;
269 : const ary::idl::CodeEntity *
270 526 : pCe = Env().Linker().Search_CeFromType(i_baseType);
271 :
272 : csv_assert(io_nDepth > 0);
273 526 : if (io_nDepth > 30)
274 0 : io_nDepth = 30;
275 : o_screen
276 526 : << (C_sSpace + 93 - 3*io_nDepth)
277 1052 : << new csi::xml::XmlCode("┗")
278 526 : << " ";
279 :
280 526 : if (pCe == 0)
281 : {
282 : HF_IdlTypeText
283 0 : aText( Env(), o_screen );
284 0 : aText.Produce_byData( i_baseType );
285 : o_screen
286 0 : << "\n";
287 0 : --io_nDepth;
288 0 : return;
289 : }
290 :
291 : HF_IdlTypeText
292 526 : aBaseLink( Env(), o_screen );
293 526 : aBaseLink.Produce_byData(pCe->CeId());
294 : o_screen
295 526 : << "\n";
296 :
297 : // Bases
298 : ary::idl::Type_id
299 526 : nBaseT = baseOf(*pCe);
300 526 : if (nBaseT.IsValid())
301 188 : recursive_ShowBases(o_screen,nBaseT,io_nDepth);
302 :
303 526 : --io_nDepth;
304 526 : return;
305 : }
306 :
307 : HtmlFactory_Idl::type_id
308 0 : HtmlFactory_Idl::inq_BaseOf( const client & ) const
309 : {
310 : // Unused dummy.
311 0 : return type_id(0);
312 3 : }
313 :
314 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|