/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.xml.sax.SAXException; import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.FormattingResults; import org.apache.fop.fo.extensions.ExternalDocument; import org.apache.fop.fo.flow.BasicLink; import org.apache.fop.fo.flow.Block; import org.apache.fop.fo.flow.BlockContainer; import org.apache.fop.fo.flow.Character; import org.apache.fop.fo.flow.ExternalGraphic; import org.apache.fop.fo.flow.Footnote; import org.apache.fop.fo.flow.FootnoteBody; import org.apache.fop.fo.flow.Inline; import org.apache.fop.fo.flow.InstreamForeignObject; import org.apache.fop.fo.flow.Leader; 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.flow.PageNumber; import org.apache.fop.fo.flow.PageNumberCitation; import org.apache.fop.fo.flow.PageNumberCitationLast; import org.apache.fop.fo.flow.RetrieveMarker; import org.apache.fop.fo.flow.RetrieveTableMarker; import org.apache.fop.fo.flow.Wrapper; import org.apache.fop.fo.flow.table.Table; import org.apache.fop.fo.flow.table.TableBody; import org.apache.fop.fo.flow.table.TableCell; import org.apache.fop.fo.flow.table.TableColumn; import org.apache.fop.fo.flow.table.TableFooter; import org.apache.fop.fo.flow.table.TableHeader; import org.apache.fop.fo.flow.table.TableRow; import org.apache.fop.fo.pagination.Flow; import org.apache.fop.fo.pagination.PageSequence; import org.apache.fop.fo.pagination.Root; import org.apache.fop.fo.pagination.StaticContent; import org.apache.fop.fonts.FontEventAdapter; import org.apache.fop.fonts.FontInfo; /** * Abstract class defining what should be done with SAX events that map to * XSL-FO input. The events are actually captured by fo/FOTreeBuilder, passed * to the various fo Objects, which in turn, if needed, pass them to an instance * of FOEventHandler. * * Sub-classes will generally fall into one of two categories: * 1) a handler that actually builds an FO Tree from the events, or 2) a * handler that builds a structured (as opposed to formatted) document, such * as our MIF and RTF output targets. */ public abstract class FOEventHandler { /** * The FOUserAgent for this process */ protected FOUserAgent foUserAgent; /** * The Font information relevant for this document */ protected FontInfo fontInfo; /** * Main constructor * @param foUserAgent the apps.FOUserAgent instance for this process */ public FOEventHandler(FOUserAgent foUserAgent) { this.foUserAgent = foUserAgent; this.fontInfo = new FontInfo(); this.fontInfo.setEventListener(new FontEventAdapter(foUserAgent.getEventBroadcaster())); } /** Constructor for sub-classes that do not need an {@link FOUserAgent} instance. */ protected FOEventHandler() { } /** * Returns the User Agent object associated with this FOEventHandler. * @return the User Agent object */ public FOUserAgent getUserAgent() { return foUserAgent; } /** * Retrieve the font information for this document * @return the FontInfo instance for this document */ public FontInfo getFontInfo() { return this.fontInfo; } /** * This method is called to indicate the start of a new document run. * @throws SAXException In case of a problem */ public void startDocument() throws SAXException { } /** * This method is called to indicate the end of a document run. * @throws SAXException In case of a problem */ public void endDocument() throws SAXException { } /** * Called upon start of root element. * @param root element */ public void startRoot(Root root) { } /** * Called upon end of root element. * @param root element */ public void endRoot(Root root) { } /** * * @param pageSeq PageSequence that is starting. */ public void startPageSequence(PageSequence pageSeq) { } /** * @param pageSeq PageSequence that is ending. */ public void endPageSequence(PageSequence pageSeq) { } /** * * @param pagenum PageNumber that is starting. */ public void startPageNumber(PageNumber pagenum) { } /** * * @param pagenum PageNumber that is ending. */ public void endPageNumber(PageNumber pagenum) { } /** * * @param pageCite PageNumberCitation that is starting. */ public void startPageNumberCitation(PageNumberCitation pageCite) { } /** * * @param pageCite PageNumberCitation that is ending. */ public void endPageNumberCitation(PageNumberCitation pageCite) { } /** * * @param pageLast PageNumberCitationLast that is starting. */ public void startPageNumberCitationLast(PageNumberCitationLast pageLast) { } /** * * @param pageLast PageNumberCitationLast that is ending. */ public void endPageNumberCitationLast(PageNumberCitationLast pageLast) { } /** * Process start of a Static. * @param staticContent StaticContent that is starting */ public void startStatic(StaticContent staticContent) { } /** * Process end of a Static. * @param staticContent StaticContent that is ending */ public void endStatic(StaticContent staticContent) { } /** * This method is called to indicate the start of a new fo:flow * or fo:static-content. * This method also handles fo:static-content tags, because the * StaticContent class is derived from the Flow class. * * @param fl Flow that is starting. */ public void startFlow(Flow fl) { } /** * * @param fl Flow that is ending. */ public void endFlow(Flow fl) { } /** * * @param bl Block that is starting. */ public void startBlock(Block bl) { } /** * * @param bl Block that is ending. */ public void endBlock(Block bl) { } /** * * @param blc BlockContainer that is starting. */ public void startBlockContainer(BlockContainer blc) { } /** * * @param blc BlockContainer that is ending. */ public void endBlockContainer(BlockContainer blc) { } /** * * @param inl Inline that is starting. */ public void startInline(Inline inl) { } /** * * @param inl Inline that is ending. */ public void endInline(Inline inl) { } // Tables /** * * @param tbl Table that is starting. */ public void startTable(Table tbl) { } /** * * @param tbl Table that is ending. */ public void endTable(Table tbl) { } /** * * @param tc TableColumn that is starting; */ public void startColumn(TableColumn tc) { } /** * * @param tc TableColumn that is ending; */ public void endColumn(TableColumn tc) { } /** * * @param header TableHeader that is starting; */ public void startHeader(TableHeader header) { } /** * * @param header TableHeader that is ending. */ public void endHeader(TableHeader header) { } /** * * @param footer TableFooter that is starting. */ public void startFooter(TableFooter footer) { } /** * * @param footer TableFooter that is ending. */ public void endFooter(TableFooter footer) { } /** * * @param body TableBody that is starting. */ public void startBody(TableBody body) { } /** * * @param body TableBody that is ending. */ public void endBody(TableBody body) { } /** * * @param tr TableRow that is starting. */ public void startRow(TableRow tr) { } /** * * @param tr TableRow that is ending. */ public void endRow(TableRow tr) { } /** * * @param tc TableCell that is starting. */ public void startCell(TableCell tc) { } /** * * @param tc TableCell that is ending. */ public void endCell(TableCell tc) { } // Lists /** * * @param lb ListBlock that is starting. */ public void startList(ListBlock lb) { } /** * * @param lb ListBlock that is ending. */ public void endList(ListBlock lb) { } /** * * @param li ListItem that is starting. */ public void startListItem(ListItem li) { } /** * * @param li ListItem that is ending. */ public void endListItem(ListItem li) { } /** * Process start of a ListLabel. * @param listItemLabel ListItemLabel that is starting */ public void startListLabel(ListItemLabel listItemLabel) { } /** * Process end of a ListLabel. * @param listItemLabel ListItemLabel that is ending */ public void endListLabel(ListItemLabel listItemLabel) { } /** * Process start of a ListBody. * @param listItemBody ListItemBody that is starting */ public void startListBody(ListItemBody listItemBody) { } /** * Process end of a ListBody. * @param listItemBody ListItemBody that is ending */ public void endListBody(ListItemBody listItemBody) { } /** * Process start of a Markup. */ public void startMarkup() { } /** * Process end of a Markup. */ public void endMarkup() { } /** * Process start of a Link. * @param basicLink BasicLink that is starting */ public void startLink(BasicLink basicLink) { } /** * Process end of a Link. * @param basicLink BasicLink that is ending */ public void endLink(BasicLink basicLink) { } /** * Process an ExternalGraphic. * @param eg ExternalGraphic to process. */ public void image(ExternalGraphic eg) { } /** * Process a pageRef. */ public void pageRef() { } /** * Process the start of an InstreamForeignObject. * @param ifo InstreamForeignObject that is starting */ public void startInstreamForeignObject(InstreamForeignObject ifo) { } /** * Process the end of an InstreamForeignObject. * @param ifo InstreamForeignObject that is ending */ public void endInstreamForeignObject(InstreamForeignObject ifo) { } /** * Process the start of a footnote. * @param footnote Footnote that is starting */ public void startFootnote(Footnote footnote) { } /** * Process the ending of a footnote. * @param footnote Footnote that is ending */ public void endFootnote(Footnote footnote) { } /** * Process the start of a footnote body. * @param body FootnoteBody that is starting */ public void startFootnoteBody(FootnoteBody body) { } /** * Process the ending of a footnote body. * @param body FootnoteBody that is ending */ public void endFootnoteBody(FootnoteBody body) { } /** * Process the start of a Leader. * @param l Leader that is starting */ public void startLeader(Leader l) { } /** * Process the end of a Leader. * @param l Leader that is ending */ public void endLeader(Leader l) { } /** * Process the start of a wrapper. * * @param wrapper wrapper that is starting */ public void startWrapper(Wrapper wrapper) { } /** * Process the ending of a wrapper. * * @param wrapper wrapper that is ending */ public void endWrapper(Wrapper wrapper) { } /** * Process the start of a retrieve-marker. * * @param retrieveMarker the retrieve-marker that is starting */ public void startRetrieveMarker(RetrieveMarker retrieveMarker) { } /** * Process the ending of a retrieve-marker. * * @param retrieveMarker the retrieve-marker that is ending */ public void endRetrieveMarker(RetrieveMarker retrieveMarker) { } /** * Restore the state of this event handler as it was when the given fo:retrieve-marker * element was processed. This method is called at marker retrieval time, so that * events for the marker descendants are fired within the proper context. *
The default implementation of this method does nothing.
* * @param retrieveMarker the fo:retrieve-marker element that is retrieving markers */ public void restoreState(RetrieveMarker retrieveMarker) { } /** * Process the start of a retrieve-table-marker. * * @param retrieveTableMarker the retrieve-table-marker that is starting */ public void startRetrieveTableMarker(RetrieveTableMarker retrieveTableMarker) { } /** * Process the ending of a retrieve-table-marker. * * @param retrieveTableMarker the retrieve-table-marker that is ending */ public void endRetrieveTableMarker(RetrieveTableMarker retrieveTableMarker) { } /** * See {@link #restoreState(RetrieveMarker)}. */ public void restoreState(RetrieveTableMarker retrieveTableMarker) { } /** * Process a Character. * @param c Character to process. */ public void character(Character c) { } /** * Process character data. * @param foText text to process */ public void characters(FOText foText) { } /** * Process the start of the external-document extension. * @param document the external-document node */ public void startExternalDocument(ExternalDocument document) { } /** * Process the end of the external-document extension. * @param document the external-document node */ public void endExternalDocument(ExternalDocument document) { } /** * Get formatting results. * @return the FormattingResults instance for this document */ public FormattingResults getResults() { return null; } }