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