/* * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* $Id$ */ package org.apache.fop.fo; import org.apache.fop.fo.flow.BlockContainer; import org.apache.fop.fo.flow.Character; import org.apache.fop.fo.pagination.ColorProfile; import org.apache.fop.fo.pagination.ConditionalPageMasterReference; import org.apache.fop.fo.pagination.Declarations; import org.apache.fop.fo.extensions.ExtensionObj; import org.apache.fop.fo.extensions.Bookmarks; import org.apache.fop.fo.extensions.Label; import org.apache.fop.fo.extensions.Outline; import org.apache.fop.fo.flow.ExternalGraphic; import org.apache.fop.fo.pagination.Flow; import org.apache.fop.fo.pagination.StaticContent; import org.apache.fop.fo.flow.BidiOverride; import org.apache.fop.fo.flow.Block; import org.apache.fop.fo.flow.Inline; import org.apache.fop.fo.flow.BasicLink; import org.apache.fop.fo.flow.Leader; import org.apache.fop.fo.flow.Marker; import org.apache.fop.fo.flow.RetrieveMarker; import org.apache.fop.fo.pagination.Title; import org.apache.fop.fo.flow.Wrapper; import org.apache.fop.fo.flow.Footnote; import org.apache.fop.fo.flow.FootnoteBody; import org.apache.fop.fo.flow.InlineContainer; import org.apache.fop.fo.flow.InstreamForeignObject; import org.apache.fop.fo.pagination.LayoutMasterSet; import org.apache.fop.fo.flow.ListBlock; import org.apache.fop.fo.flow.ListItem; import org.apache.fop.fo.flow.ListItemBody; import org.apache.fop.fo.flow.ListItemLabel; import org.apache.fop.fo.pagination.PageMasterReference; import org.apache.fop.fo.pagination.RepeatablePageMasterReference; import org.apache.fop.fo.pagination.SinglePageMasterReference; import org.apache.fop.fo.flow.PageNumber; import org.apache.fop.fo.flow.PageNumberCitation; import org.apache.fop.fo.pagination.PageSequence; import org.apache.fop.fo.pagination.PageSequenceMaster; import org.apache.fop.fo.pagination.Region; import org.apache.fop.fo.pagination.RegionBASE; import org.apache.fop.fo.pagination.RegionBA; import org.apache.fop.fo.pagination.RegionAfter; import org.apache.fop.fo.pagination.RegionBefore; import org.apache.fop.fo.pagination.RegionSE; import org.apache.fop.fo.pagination.RegionEnd; import org.apache.fop.fo.pagination.RegionStart; import org.apache.fop.fo.pagination.RegionBody; import org.apache.fop.fo.pagination.RepeatablePageMasterAlternatives; import org.apache.fop.fo.pagination.Root; import org.apache.fop.fo.pagination.SimplePageMaster; import org.apache.fop.fo.flow.Table; import org.apache.fop.fo.flow.TableBody; import org.apache.fop.fo.flow.TableFooter; import org.apache.fop.fo.flow.TableHeader; import org.apache.fop.fo.flow.TableCell; import org.apache.fop.fo.flow.TableColumn; import org.apache.fop.fo.flow.TableRow; import org.apache.fop.fo.flow.Float; import org.apache.fop.fo.flow.InitialPropertySet; import org.apache.fop.fo.flow.MultiCase; import org.apache.fop.fo.flow.MultiProperties; import org.apache.fop.fo.flow.MultiPropertySet; import org.apache.fop.fo.flow.MultiSwitch; import org.apache.fop.fo.flow.MultiToggle; import org.apache.fop.fo.flow.TableAndCaption; import org.apache.fop.fo.flow.TableCaption; import org.apache.fop.fo.extensions.svg.SVGObj; import org.apache.fop.fo.extensions.svg.SVGElement; /** *
Implements the GoF Visitor design pattern to allow access to the FOTree * hierarchy without knowing what subclass of FONode is being accessed. * To preserve inheritance, and simulate the polymorphism that would exist if * the subclass methods were embedded in the visited hierarchy, the default for * each method (except serveFONode(FONode)) is to run the the serveXXXX method * that corresponds to the superclass of the FOTree child element. Thus, any * method that is overridden in a subclass of FOTreeVisitor will affect not only * FOTree elements of the class that method was written for, but also all * subclasses of that class.
*Caveat: Because there appears to be no way for one * object to cast objects from another class to their superclass, this * superclass logic has been hard-coded into FOTreeVisitor. So, for example, * serveFObj(FObj) runs the following:
* serveFONode((FONode)node);
* If FObj ceases to be a direct subclass of FONode, then the above may cause * problems.
*/ public interface FOTreeVisitor { /** * @param node FONode object to process */ public void serveFONode(FONode node); /** * @param node FObj object to process */ public void serveFObj(FObj node); /** * @param node BlockContainer object to process */ public void serveBlockContainer(BlockContainer node); /** * @param node Character object to process */ public void serveCharacter(Character node); /** * @param node ColorProfile object to process */ public void serveColorProfile(ColorProfile node); /** * @param node ConditionalPageMasterReference object to process */ public void serveConditionalPageMasterReference(ConditionalPageMasterReference node); /** * @param node Declarations object to process */ public void serveDeclarations(Declarations node); /** * @param node ExtensionObj object to process */ public void serveExtensionObj(ExtensionObj node); /** * @param node Bookmarks object to process */ public void serveBookmarks(Bookmarks node); /** * @param node Label object to process */ public void serveLabel(Label node); /** * @param node Outline object to process */ public void serveOutline(Outline node); /** * @param node ExternalGraphic object to process */ public void serveExternalGraphic(ExternalGraphic node); /** * @param node Flow object to process */ public void serveFlow(Flow node); /** * @param node StaticContent object to process */ public void serveStaticContent(StaticContent node); /** * @param node FObjMixed object to process */ public void serveFObjMixed(FObjMixed node); /** * @param node BidiOverride object to process */ public void serveBidiOverride(BidiOverride node); /** * @param node Block object to process */ public void serveBlock(Block node); /** * @param node Inline object to process */ public void serveInline(Inline node); /** * @param node BasicLink object to process */ public void serveBasicLink(BasicLink node); /** * @param node Leader object to process */ public void serveLeader(Leader node); /** * @param node Marker object to process */ public void serveMarker(Marker node); /** * @param node RetrieveMarker object to process */ public void serveRetrieveMarker(RetrieveMarker node); /** * @param node Title object to process */ public void serveTitle(Title node); /** * @param node Wrapper object to process */ public void serveWrapper(Wrapper node); /** * @param node Footnote object to process */ public void serveFootnote(Footnote node); /** * @param node FootnoteBody object to process */ public void serveFootnoteBody(FootnoteBody node); /** * @param node FOText object to process */ public void serveFOText(FOText node); /** * @param node InlineContainer object to process */ public void serveInlineContainer(InlineContainer node); /** * @param node InstreamForeignObject object to process */ public void serveInstreamForeignObject(InstreamForeignObject node); /** * @param node LayoutMasterSet object to process */ public void serveLayoutMasterSet(LayoutMasterSet node); /** * @param node ListBlock object to process */ public void serveListBlock(ListBlock node); /** * @param node ListItem object to process */ public void serveListItem(ListItem node); /** * @param node ListItemBody object to process */ public void serveListItemBody(ListItemBody node); /** * @param node ListItemLabel object to process */ public void serveListItemLabel(ListItemLabel node); /** * @param node PageMasterReference object to process */ public void servePageMasterReference(PageMasterReference node); /** * @param node RepeatablePageMasterReference object to process */ public void serveRepeatablePageMasterReference(RepeatablePageMasterReference node); /** * @param node SinglePageMasterReference object to process */ public void serveSinglePageMasterReference(SinglePageMasterReference node); /** * @param node PageNumber object to process */ public void servePageNumber(PageNumber node); /** * @param node PageNumberCitation object to process */ public void servePageNumberCitation(PageNumberCitation node); /** * @param node PageSequence object to process */ public void servePageSequence(PageSequence node); /** * @param node PageSequenceMaster object to process */ public void servePageSequenceMaster(PageSequenceMaster node); /** * @param node Region object to process */ public void serveRegion(Region node); /** * @param node RegionBASE object to process */ public void serveRegionBASE(RegionBASE node); /** * @param node RegionBA object to process */ public void serveRegionBA(RegionBA node); /** * @param node RegionAfter object to process */ public void serveRegionAfter(RegionAfter node); /** * @param node RegionBefore object to process */ public void serveRegionBefore(RegionBefore node); /** * @param node RegionSE object to process */ public void serveRegionSE(RegionSE node); /** * @param node RegionEnd object to process */ public void serveRegionEnd(RegionEnd node); /** * @param node RegionStart object to process */ public void serveRegionStart(RegionStart node); /** * @param node RegionBody object to process */ public void serveRegionBody(RegionBody node); /** * @param node RepeatablePageMasterAlternatives object to process */ public void serveRepeatablePageMasterAlternatives(RepeatablePageMasterAlternatives node); /** * @param node Root object to process */ public void serveRoot(Root node); /** * @param node SimplePageMaster object to process */ public void serveSimplePageMaster(SimplePageMaster node); /** * @param node Table object to process */ public void serveTable(Table node); /** * @param node TableBody object to process */ public void serveTableBody(TableBody node); /** * @param node TableFooter object to process */ public void serveTableFooter(TableFooter node); /** * @param node TableHeader object to process */ public void serveTableHeader(TableHeader node); /** * @param node TableCell object to process */ public void serveTableCell(TableCell node); /** * @param node TableColumn object to process */ public void serveTableColumn(TableColumn node); /** * @param node TableRow object to process */ public void serveTableRow(TableRow node); /** * @param node ToBeImplementedElement object to process */ public void serveToBeImplementedElement(ToBeImplementedElement node); /** * @param node Float object to process */ public void serveFloat(Float node); /** * @param node InitialPropertySet object to process */ public void serveInitialPropertySet(InitialPropertySet node); /** * @param node MultiCase object to process */ public void serveMultiCase(MultiCase node); /** * @param node MultiProperties object to process */ public void serveMultiProperties(MultiProperties node); /** * @param node MultiPropertySet object to process */ public void serveMultiPropertySet(MultiPropertySet node); /** * @param node MultiSwitch object to process */ public void serveMultiSwitch(MultiSwitch node); /** * @param node MultiToggle object to process */ public void serveMultiToggle(MultiToggle node); /** * @param node TableAndCaption object to process */ public void serveTableAndCaption(TableAndCaption node); /** * @param node TableCaption object to process */ public void serveTableCaption(TableCaption node); /** * @param node Unknown object to process */ public void serveUnknown(Unknown node); /** * @param node XMLObj object to process */ public void serveXMLObj(XMLObj node); /** * @param node SVGObj object to process */ public void serveSVGObj(SVGObj node); /** * @param node SVGElement object to process */ public void serveSVGElement(SVGElement node); /** * @param node UnknownXMLObj object to process */ public void serveUnknownXMLObj(UnknownXMLObj node); /** * @param node XMLElement object to process */ public void serveXMLElement(XMLElement node); }