View Javadoc

1   package org.apache.maven.doxia.book.services.renderer.docbook;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.io.Writer;
23  
24  import javax.swing.text.MutableAttributeSet;
25  import javax.swing.text.html.HTML.Tag;
26  
27  import org.apache.maven.doxia.module.docbook.DocBookSink;
28  
29  /**
30   * An Docbook Sink that doesn't write out head or body elements for every section of a book, and has some convenience
31   * methods relating to the construction of a Doxia Book.
32   *
33   * @author Dave Syer
34   * @version $Id: DocBookBookSink.java 808201 2009-08-26 22:04:43Z vsiveton $
35   * @since 1.1
36   */
37  public class DocBookBookSink
38      extends DocBookSink
39  {
40      /** Indicates if we're inside a head. */
41      private boolean hasHead = false;
42  
43      /**
44       * Construct a new DocBookSink.
45       *
46       * @param out the writer for the sink.
47       */
48      public DocBookBookSink( Writer out )
49      {
50          super( out );
51  
52          setSystemId( "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" );
53          setPublicId( "-//OASIS//DTD DocBook V4.4//EN" );
54      }
55  
56      // ----------------------------------------------------------------------
57      //
58      // ----------------------------------------------------------------------
59  
60      /**
61       * {@inheritDoc}
62       *
63       * Does nothing because we don't want the header from each document to crop up in the middle of a book.
64       */
65      public void head()
66      {
67          // noop
68      }
69  
70      /**
71       * {@inheritDoc}
72       *
73       * Does nothing because we don't want the header from each document to crop up in the middle of a book.
74       */
75      public void head_()
76      {
77          // noop
78      }
79  
80      /**
81       * {@inheritDoc}
82       *
83       * Marks the skip flag to true so that this element's text is not emitted by the base class.
84       */
85      public void title()
86      {
87          setSkip( true );
88      }
89  
90      /**
91       * {@inheritDoc}
92       *
93       * Marks the skip flag to false so that rendering can resume.
94       */
95      public void title_()
96      {
97          setSkip( false );
98      }
99  
100     /**
101      * {@inheritDoc}
102      *
103      * Marks the skip flag to true so that this element's text is not emitted by the base class.
104      */
105     public void author()
106     {
107         setSkip( true );
108     }
109 
110     /**
111      * {@inheritDoc}
112      *
113      * Marks the skip flag to false so that rendering can resume.
114      */
115     public void author_()
116     {
117         setSkip( false );
118     }
119 
120     /**
121      * {@inheritDoc}
122      *
123      * Does nothing because we don't want the header from each document to crop up in the middle of a book.
124      */
125     public void body()
126     {
127         // noop
128     }
129 
130     /**
131      * {@inheritDoc}
132      *
133      * Does nothing because we don't want the header from each document to crop up in the middle of a book.
134      */
135     public void body_()
136     {
137         // noop
138     }
139 
140     /**
141      * Emit the start tag for the book.
142      *
143      * @see org.apache.maven.doxia.module.docbook.DocbookMarkup#BOOK_TAG
144      */
145     public void book()
146     {
147         init();
148 
149         MutableAttributeSet att = writeXmlHeader( "book" );
150 
151         writeStartTag( BOOK_TAG, att );
152 
153     }
154 
155     /**
156      * Emit the end tag for the book.
157      *
158      * @see org.apache.maven.doxia.module.docbook.DocbookMarkup#BOOK_TAG
159      */
160     public void book_()
161     {
162         writeEndTag( BOOK_TAG );
163         flush();
164     }
165 
166     /** If no header matter has yet been encountered emit the book info start tag. */
167     private void bookHead()
168     {
169         if ( !hasHead )
170         {
171             writeStartTag( BOOKINFO_TAG );
172             hasHead = true;
173         }
174     }
175 
176     /**
177      * If some header matter has been encountered emit the book info end tag.
178      */
179     public void bookHead_()
180     {
181         if ( hasHead )
182         {
183             writeEndTag( BOOKINFO_TAG );
184             hasHead = false;
185         }
186     }
187 
188     /**
189      * Emit the title start tag for the whole book.
190      */
191     public void bookTitle()
192     {
193         bookHead();
194         writeStartTag( Tag.TITLE );
195     }
196 
197     /**
198      * Emit the title end tag for the whole book.
199      */
200     public void bookTitle_()
201     {
202         super.title_();
203     }
204 
205     /**
206      * Emit the author start tag for the whole book.
207      */
208     public void bookAuthor()
209     {
210         bookHead();
211         super.author();
212     }
213 
214    /**
215     * Emit the author end tag for the whole book.
216     */
217    public void bookAuthor_()
218     {
219         super.author_();
220     }
221 
222    /**
223     * Emit the date start tag for the whole book.
224     */
225    public void bookDate()
226     {
227         bookHead();
228         super.date();
229     }
230 
231     /**
232      * Emit the date end tag for the whole book.
233      */
234     public void bookDate_()
235     {
236         super.date_();
237     }
238 
239     /**
240      * Emit the chapter start tag.
241      */
242     public void chapter()
243     {
244         writeStartTag( CHAPTER_TAG );
245     }
246 
247     /**
248      * Emit the chapter end tag.
249      */
250     public void chapter_()
251     {
252         writeEndTag( CHAPTER_TAG );
253     }
254 
255     /**
256      * Emit the chapter title start tag.
257      */
258     public void chapterTitle()
259     {
260         writeStartTag( Tag.TITLE );
261     }
262 
263     /**
264      * Emit the chapter title end tag.
265      */
266     public void chapterTitle_()
267     {
268         writeEndTag( Tag.TITLE );
269     }
270 }