1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 /* $Id: FOElementMapping.java 1835810 2018-07-13 10:29:57Z ssteiner $ */
19 
20 package org.apache.fop.fo;
21 
22 // Java
23 import java.util.HashMap;
24 
25 import org.apache.xmlgraphics.util.QName;
26 
27 import org.apache.fop.layoutmgr.BlockLevelEventProducer;
28 
29 /**
30  * Element mapping class for all XSL-FO elements.
31  */
32 public class FOElementMapping extends ElementMapping {
33 
34     /** The XSL-FO namespace URI */
35     public static final String URI = "http://www.w3.org/1999/XSL/Format";
36 
37      /** Standard prefix */
38     public static final String STANDARD_PREFIX = "fo";
39 
40     /**
41      * Basic constructor; inititializes the namespace URI for the fo: namespace
42      */
FOElementMapping()43     public FOElementMapping() {
44         namespaceURI = URI;
45     }
46 
47     /**
48      * Initializes the collection of valid objects for the fo: namespace
49      */
initialize()50     protected void initialize() {
51         if (foObjs == null) {
52             foObjs = new HashMap<String, Maker>();
53 
54             // Declarations and Pagination and Layout Formatting Objects
55             foObjs.put("root", new RootMaker());
56             foObjs.put("declarations", new DeclarationsMaker());
57             foObjs.put("color-profile", new ColorProfileMaker());
58             foObjs.put("bookmark-tree", new BookmarkTreeMaker());
59             foObjs.put("bookmark", new BookmarkMaker());
60             foObjs.put("bookmark-title", new BookmarkTitleMaker());
61 //          foObjs.put("page-sequence-wrapper", new PageSequenceWrapperMaker());
62             foObjs.put("page-sequence", new PageSequenceMaker());
63             foObjs.put("layout-master-set", new LayoutMasterSetMaker());
64             foObjs.put("page-sequence-master",
65                            new PageSequenceMasterMaker());
66             foObjs.put("single-page-master-reference",
67                            new SinglePageMasterReferenceMaker());
68             foObjs.put("repeatable-page-master-reference",
69                            new RepeatablePageMasterReferenceMaker());
70             foObjs.put("repeatable-page-master-alternatives",
71                            new RepeatablePageMasterAlternativesMaker());
72             foObjs.put("conditional-page-master-reference",
73                            new ConditionalPageMasterReferenceMaker());
74             foObjs.put("simple-page-master",
75                            new SimplePageMasterMaker());
76             foObjs.put("region-body", new RegionBodyMaker());
77             foObjs.put("region-before", new RegionBeforeMaker());
78             foObjs.put("region-after", new RegionAfterMaker());
79             foObjs.put("region-start", new RegionStartMaker());
80             foObjs.put("region-end", new RegionEndMaker());
81             foObjs.put("flow", new FlowMaker());
82             foObjs.put("static-content", new StaticContentMaker());
83             foObjs.put("title", new TitleMaker());
84 
85             // Block-level Formatting Objects
86             foObjs.put("block", new BlockMaker());
87             foObjs.put("block-container", new BlockContainerMaker());
88 
89             // Inline-level Formatting Objects
90             foObjs.put("bidi-override", new BidiOverrideMaker());
91             foObjs.put("character",
92                            new CharacterMaker());
93             foObjs.put("initial-property-set",
94                            new InitialPropertySetMaker());
95             foObjs.put("external-graphic", new ExternalGraphicMaker());
96             foObjs.put("instream-foreign-object",
97                            new InstreamForeignObjectMaker());
98             foObjs.put("inline", new InlineMaker());
99             foObjs.put("inline-container", new InlineContainerMaker());
100             foObjs.put("leader", new LeaderMaker());
101             foObjs.put("page-number", new PageNumberMaker());
102             foObjs.put("page-number-citation",
103                            new PageNumberCitationMaker());
104             foObjs.put("page-number-citation-last",
105                     new PageNumberCitationLastMaker());
106 
107             // Formatting Objects for Tables
108             foObjs.put("table-and-caption", new TableAndCaptionMaker());
109             foObjs.put("table", new TableMaker());
110             foObjs.put("table-column", new TableColumnMaker());
111             foObjs.put("table-caption", new TableCaptionMaker());
112             foObjs.put("table-header", new TableHeaderMaker());
113             foObjs.put("table-footer", new TableFooterMaker());
114             foObjs.put("table-body", new TableBodyMaker());
115             foObjs.put("table-row", new TableRowMaker());
116             foObjs.put("table-cell", new TableCellMaker());
117 
118             // Formatting Objects for Lists
119             foObjs.put("list-block", new ListBlockMaker());
120             foObjs.put("list-item", new ListItemMaker());
121             foObjs.put("list-item-body", new ListItemBodyMaker());
122             foObjs.put("list-item-label", new ListItemLabelMaker());
123 
124             // Dynamic Effects: Link and Multi Formatting Objects
125             foObjs.put("basic-link", new BasicLinkMaker());
126             foObjs.put("multi-switch", new MultiSwitchMaker());
127             foObjs.put("multi-case", new MultiCaseMaker());
128             foObjs.put("multi-toggle", new MultiToggleMaker());
129             foObjs.put("multi-properties", new MultiPropertiesMaker());
130             foObjs.put("multi-property-set",
131                            new MultiPropertySetMaker());
132 
133             // Out-of-Line Formatting Objects
134             foObjs.put("float",
135                            new FloatMaker());
136             foObjs.put("footnote", new FootnoteMaker());
137             foObjs.put("footnote-body", new FootnoteBodyMaker());
138 
139             // Other Formatting Objects
140             foObjs.put("wrapper", new WrapperMaker());
141             foObjs.put("marker", new MarkerMaker());
142             foObjs.put("retrieve-marker", new RetrieveMarkerMaker());
143             foObjs.put("retrieve-table-marker", new RetrieveTableMarkerMaker());
144 
145             // change bars
146             foObjs.put("change-bar-begin", new ChangeBarBeginMaker());
147             foObjs.put("change-bar-end", new ChangeBarEndMaker());
148         }
149     }
150 
151     /** {@inheritDoc} */
getStandardPrefix()152     public String getStandardPrefix() {
153         return STANDARD_PREFIX;
154     }
155 
156     /** {@inheritDoc} */
isAttributeProperty(QName attributeName)157     public boolean isAttributeProperty(QName attributeName) {
158         return true; //All XSL-FO attributes are to be converted to properties.
159     }
160 
161     static class RootMaker extends ElementMapping.Maker {
make(FONode parent)162         public FONode make(FONode parent) {
163             return new org.apache.fop.fo.pagination.Root(parent);
164         }
165     }
166 
167     static class DeclarationsMaker extends ElementMapping.Maker {
make(FONode parent)168         public FONode make(FONode parent) {
169             return new org.apache.fop.fo.pagination.Declarations(parent);
170         }
171     }
172 
173     static class ColorProfileMaker extends ElementMapping.Maker {
make(FONode parent)174         public FONode make(FONode parent) {
175             return new org.apache.fop.fo.pagination.ColorProfile(parent);
176         }
177     }
178 
179     static class BookmarkTreeMaker extends ElementMapping.Maker {
make(FONode parent)180         public FONode make(FONode parent) {
181             return new org.apache.fop.fo.pagination.bookmarks.BookmarkTree(parent);
182         }
183     }
184 
185     static class BookmarkMaker extends ElementMapping.Maker {
make(FONode parent)186         public FONode make(FONode parent) {
187             return new org.apache.fop.fo.pagination.bookmarks.Bookmark(parent);
188         }
189     }
190 
191     static class BookmarkTitleMaker extends ElementMapping.Maker {
make(FONode parent)192         public FONode make(FONode parent) {
193             return new org.apache.fop.fo.pagination.bookmarks.BookmarkTitle(parent);
194         }
195     }
196 
197     static class PageSequenceWrapperMaker extends ElementMapping.Maker {
make(FONode parent)198         public FONode make(FONode parent) {
199             return new org.apache.fop.fo.pagination.PageSequenceWrapper(parent);
200         }
201     }
202 
203     static class PageSequenceMaker extends ElementMapping.Maker {
make(FONode parent)204         public FONode make(FONode parent) {
205             return new org.apache.fop.fo.pagination.PageSequence(parent);
206         }
207     }
208 
209     static class LayoutMasterSetMaker extends ElementMapping.Maker {
make(FONode parent)210         public FONode make(FONode parent) {
211             return new org.apache.fop.fo.pagination.LayoutMasterSet(parent);
212         }
213     }
214 
215     static class PageSequenceMasterMaker extends ElementMapping.Maker {
make(FONode parent)216         public FONode make(FONode parent) {
217             return new org.apache.fop.fo.pagination.PageSequenceMaster(parent,
218                     BlockLevelEventProducer.Provider.get(
219                             parent.getUserAgent().getEventBroadcaster()));
220         }
221     }
222 
223     static class SinglePageMasterReferenceMaker extends ElementMapping.Maker {
make(FONode parent)224         public FONode make(FONode parent) {
225             return new org.apache.fop.fo.pagination.SinglePageMasterReference(parent);
226         }
227     }
228 
229     static class RepeatablePageMasterReferenceMaker extends ElementMapping.Maker {
make(FONode parent)230         public FONode make(FONode parent) {
231             return new org.apache.fop.fo.pagination.RepeatablePageMasterReference(parent);
232         }
233     }
234 
235     static class RepeatablePageMasterAlternativesMaker extends ElementMapping.Maker {
make(FONode parent)236         public FONode make(FONode parent) {
237             return new org.apache.fop.fo.pagination.RepeatablePageMasterAlternatives(parent);
238         }
239     }
240 
241     static class ConditionalPageMasterReferenceMaker extends ElementMapping.Maker {
make(FONode parent)242         public FONode make(FONode parent) {
243             return new org.apache.fop.fo.pagination.ConditionalPageMasterReference(parent);
244         }
245     }
246 
247     static class SimplePageMasterMaker extends ElementMapping.Maker {
make(FONode parent)248         public FONode make(FONode parent) {
249             return new org.apache.fop.fo.pagination.SimplePageMaster(parent);
250         }
251     }
252 
253     static class RegionBodyMaker extends ElementMapping.Maker {
make(FONode parent)254         public FONode make(FONode parent) {
255             return new org.apache.fop.fo.pagination.RegionBody(parent);
256         }
257     }
258 
259     static class RegionBeforeMaker extends ElementMapping.Maker {
make(FONode parent)260         public FONode make(FONode parent) {
261             return new org.apache.fop.fo.pagination.RegionBefore(parent);
262         }
263     }
264 
265     static class RegionAfterMaker extends ElementMapping.Maker {
make(FONode parent)266         public FONode make(FONode parent) {
267             return new org.apache.fop.fo.pagination.RegionAfter(parent);
268         }
269     }
270 
271     static class RegionStartMaker extends ElementMapping.Maker {
make(FONode parent)272         public FONode make(FONode parent) {
273             return new org.apache.fop.fo.pagination.RegionStart(parent);
274         }
275     }
276 
277     static class RegionEndMaker extends ElementMapping.Maker {
make(FONode parent)278         public FONode make(FONode parent) {
279             return new org.apache.fop.fo.pagination.RegionEnd(parent);
280         }
281     }
282 
283     static class FlowMaker extends ElementMapping.Maker {
make(FONode parent)284         public FONode make(FONode parent) {
285             return new org.apache.fop.fo.pagination.Flow(parent);
286         }
287     }
288 
289     static class StaticContentMaker extends ElementMapping.Maker {
make(FONode parent)290         public FONode make(FONode parent) {
291             return new org.apache.fop.fo.pagination.StaticContent(parent);
292         }
293     }
294 
295     static class TitleMaker extends ElementMapping.Maker {
make(FONode parent)296         public FONode make(FONode parent) {
297             return new org.apache.fop.fo.pagination.Title(parent);
298         }
299     }
300 
301     static class BlockMaker extends ElementMapping.Maker {
make(FONode parent)302         public FONode make(FONode parent) {
303             return new org.apache.fop.fo.flow.Block(parent);
304         }
305     }
306 
307     static class BlockContainerMaker extends ElementMapping.Maker {
make(FONode parent)308         public FONode make(FONode parent) {
309             return new org.apache.fop.fo.flow.BlockContainer(parent);
310         }
311     }
312 
313     static class BidiOverrideMaker extends ElementMapping.Maker {
make(FONode parent)314         public FONode make(FONode parent) {
315             return new org.apache.fop.fo.flow.BidiOverride(parent);
316         }
317     }
318 
319     static class CharacterMaker extends ElementMapping.Maker {
make(FONode parent)320         public FONode make(FONode parent) {
321             return new org.apache.fop.fo.flow.Character(parent);
322         }
323     }
324 
325     static class InitialPropertySetMaker extends ElementMapping.Maker {
make(FONode parent)326         public FONode make(FONode parent) {
327             return new org.apache.fop.fo.flow.InitialPropertySet(parent);
328         }
329     }
330 
331     static class ExternalGraphicMaker extends ElementMapping.Maker {
make(FONode parent)332         public FONode make(FONode parent) {
333             return new org.apache.fop.fo.flow.ExternalGraphic(parent);
334         }
335     }
336 
337     static class InstreamForeignObjectMaker extends ElementMapping.Maker {
make(FONode parent)338         public FONode make(FONode parent) {
339             return new org.apache.fop.fo.flow.InstreamForeignObject(parent);
340         }
341     }
342 
343     static class InlineMaker extends ElementMapping.Maker {
make(FONode parent)344         public FONode make(FONode parent) {
345             return new org.apache.fop.fo.flow.Inline(parent);
346         }
347     }
348 
349     static class InlineContainerMaker extends ElementMapping.Maker {
make(FONode parent)350         public FONode make(FONode parent) {
351             return new org.apache.fop.fo.flow.InlineContainer(parent);
352         }
353     }
354 
355     static class LeaderMaker extends ElementMapping.Maker {
make(FONode parent)356         public FONode make(FONode parent) {
357             return new org.apache.fop.fo.flow.Leader(parent);
358         }
359     }
360 
361     static class PageNumberMaker extends ElementMapping.Maker {
make(FONode parent)362         public FONode make(FONode parent) {
363             return new org.apache.fop.fo.flow.PageNumber(parent);
364         }
365     }
366 
367     static class PageNumberCitationMaker extends ElementMapping.Maker {
make(FONode parent)368         public FONode make(FONode parent) {
369             return new org.apache.fop.fo.flow.PageNumberCitation(parent);
370         }
371     }
372 
373     static class PageNumberCitationLastMaker extends ElementMapping.Maker {
make(FONode parent)374         public FONode make(FONode parent) {
375             return new org.apache.fop.fo.flow.PageNumberCitationLast(parent);
376         }
377     }
378 
379     static class TableAndCaptionMaker extends ElementMapping.Maker {
make(FONode parent)380         public FONode make(FONode parent) {
381             return new org.apache.fop.fo.flow.table.TableAndCaption(parent);
382         }
383     }
384 
385     static class TableMaker extends ElementMapping.Maker {
make(FONode parent)386         public FONode make(FONode parent) {
387             return new org.apache.fop.fo.flow.table.Table(parent);
388         }
389     }
390 
391     static class TableColumnMaker extends ElementMapping.Maker {
make(FONode parent)392         public FONode make(FONode parent) {
393             return new org.apache.fop.fo.flow.table.TableColumn(parent);
394         }
395     }
396 
397     static class TableCaptionMaker extends ElementMapping.Maker {
make(FONode parent)398         public FONode make(FONode parent) {
399             return new org.apache.fop.fo.flow.table.TableCaption(parent);
400         }
401     }
402 
403     static class TableBodyMaker extends ElementMapping.Maker {
make(FONode parent)404         public FONode make(FONode parent) {
405             return new org.apache.fop.fo.flow.table.TableBody(parent);
406         }
407     }
408 
409     static class TableHeaderMaker extends ElementMapping.Maker {
make(FONode parent)410         public FONode make(FONode parent) {
411             return new org.apache.fop.fo.flow.table.TableHeader(parent);
412         }
413     }
414 
415     static class TableFooterMaker extends ElementMapping.Maker {
make(FONode parent)416         public FONode make(FONode parent) {
417             return new org.apache.fop.fo.flow.table.TableFooter(parent);
418         }
419     }
420 
421     static class TableRowMaker extends ElementMapping.Maker {
make(FONode parent)422         public FONode make(FONode parent) {
423             return new org.apache.fop.fo.flow.table.TableRow(parent);
424         }
425     }
426 
427     static class TableCellMaker extends ElementMapping.Maker {
make(FONode parent)428         public FONode make(FONode parent) {
429             return new org.apache.fop.fo.flow.table.TableCell(parent);
430         }
431     }
432 
433     static class ListBlockMaker extends ElementMapping.Maker {
make(FONode parent)434         public FONode make(FONode parent) {
435             return new org.apache.fop.fo.flow.ListBlock(parent);
436         }
437     }
438 
439     static class ListItemMaker extends ElementMapping.Maker {
make(FONode parent)440         public FONode make(FONode parent) {
441             return new org.apache.fop.fo.flow.ListItem(parent);
442         }
443     }
444 
445     static class ListItemBodyMaker extends ElementMapping.Maker {
make(FONode parent)446         public FONode make(FONode parent) {
447             return new org.apache.fop.fo.flow.ListItemBody(parent);
448         }
449     }
450 
451     static class ListItemLabelMaker extends ElementMapping.Maker {
make(FONode parent)452         public FONode make(FONode parent) {
453             return new org.apache.fop.fo.flow.ListItemLabel(parent);
454         }
455     }
456 
457     static class BasicLinkMaker extends ElementMapping.Maker {
make(FONode parent)458         public FONode make(FONode parent) {
459             return new org.apache.fop.fo.flow.BasicLink(parent);
460         }
461     }
462 
463     static class MultiSwitchMaker extends ElementMapping.Maker {
make(FONode parent)464         public FONode make(FONode parent) {
465             return new org.apache.fop.fo.flow.MultiSwitch(parent);
466         }
467     }
468 
469     static class MultiCaseMaker extends ElementMapping.Maker {
make(FONode parent)470         public FONode make(FONode parent) {
471             return new org.apache.fop.fo.flow.MultiCase(parent);
472         }
473     }
474 
475     static class MultiToggleMaker extends ElementMapping.Maker {
make(FONode parent)476         public FONode make(FONode parent) {
477             return new org.apache.fop.fo.flow.MultiToggle(parent);
478         }
479     }
480 
481     static class MultiPropertiesMaker extends ElementMapping.Maker {
make(FONode parent)482         public FONode make(FONode parent) {
483             return new org.apache.fop.fo.flow.MultiProperties(parent);
484         }
485     }
486 
487     static class MultiPropertySetMaker extends ElementMapping.Maker {
make(FONode parent)488         public FONode make(FONode parent) {
489             return new org.apache.fop.fo.flow.MultiPropertySet(parent);
490         }
491     }
492 
493     static class FloatMaker extends ElementMapping.Maker {
make(FONode parent)494         public FONode make(FONode parent) {
495             return new org.apache.fop.fo.flow.Float(parent);
496         }
497     }
498 
499     static class FootnoteMaker extends ElementMapping.Maker {
make(FONode parent)500         public FONode make(FONode parent) {
501             return new org.apache.fop.fo.flow.Footnote(parent);
502         }
503     }
504 
505     static class FootnoteBodyMaker extends ElementMapping.Maker {
make(FONode parent)506         public FONode make(FONode parent) {
507             return new org.apache.fop.fo.flow.FootnoteBody(parent);
508         }
509     }
510 
511     static class WrapperMaker extends ElementMapping.Maker {
make(FONode parent)512         public FONode make(FONode parent) {
513             return new org.apache.fop.fo.flow.Wrapper(parent);
514         }
515     }
516 
517     static class MarkerMaker extends ElementMapping.Maker {
make(FONode parent)518         public FONode make(FONode parent) {
519             return new org.apache.fop.fo.flow.Marker(parent);
520         }
521     }
522 
523     static class RetrieveMarkerMaker extends ElementMapping.Maker {
make(FONode parent)524         public FONode make(FONode parent) {
525             return new org.apache.fop.fo.flow.RetrieveMarker(parent);
526         }
527     }
528 
529     static class RetrieveTableMarkerMaker extends ElementMapping.Maker {
make(FONode parent)530         public FONode make(FONode parent) {
531             return new org.apache.fop.fo.flow.RetrieveTableMarker(parent);
532         }
533     }
534 
535     static class ChangeBarBeginMaker extends ElementMapping.Maker {
make(FONode parent)536         public FONode make(FONode parent) {
537             return new org.apache.fop.fo.flow.ChangeBarBegin(parent);
538         }
539     }
540 
541     static class ChangeBarEndMaker extends ElementMapping.Maker {
make(FONode parent)542         public FONode make(FONode parent) {
543             return new org.apache.fop.fo.flow.ChangeBarEnd(parent);
544         }
545     }
546 }
547