Coverage Report - org.apache.maven.doxia.sink.Sink
 
Classes in this File Line Coverage Branch Coverage Complexity
Sink
N/A
N/A
1
 
 1  
 package org.apache.maven.doxia.sink;
 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 org.apache.maven.doxia.logging.LogEnabled;
 23  
 
 24  
 /**
 25  
  * A <i>Sink</i> consumes Doxia events to produce a resultant output format
 26  
  * (eg Docbook, PDF, XHTML...).
 27  
  * <p>
 28  
  *   Doxia allows you to transform any supported input document format (ie for which a Parser exists)
 29  
  *   into any supported output document format (ie for which a Sink exists).
 30  
  * </p>
 31  
  * <p>
 32  
  *   A parser is responsible for reading an input document and emitting a sequence of Doxia events
 33  
  *   which can then be consumed by a Doxia Sink. Thus, you can parse any front- end format
 34  
  *   (eg APT, FML, Xdoc, ...) and have them all contribute to a final XHTML version of a web site.
 35  
  *   All documents being parsed result in a stream of Doxia events (eg paragraph, bold, italic,
 36  
  *   text,...), which are then fed into a XHTML Sink to produce a set of XHTML pages.
 37  
  * </p>
 38  
  * <p>
 39  
  *   A Sink is ultimately responsible for the final format and structure of the output document.
 40  
  *   For example, you can take a collection of APT documents, let a Parser emit a series of Doxia
 41  
  *   events and have that be fed into a Sink to produce a single PDF, a book, a site, or a
 42  
  *   Word document. The Sink is fully responsible for the final output.
 43  
  * </p>
 44  
  * <p>
 45  
  *   You can easily integrate any custom (XML, Wiki,...) format by creating a Doxia Parser which
 46  
  *   reads your input document and produces a proper sequence of Doxia events.
 47  
  *   Those can then be fed into an arbitrary Sink to produce any desired final output.
 48  
  * </p>
 49  
  * <p>
 50  
  * <b>Note</b>: All implemented sink <b>should</b> use UTF-8 as encoding.
 51  
  * </p>
 52  
  *
 53  
  * @since 1.0-alpha-6
 54  
  * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
 55  
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
 56  
  * @author ltheussl
 57  
  * @version $Id: Sink.java 905077 2010-01-31 17:24:47Z hboutemy $
 58  
  */
 59  
 public interface Sink
 60  
     extends LogEnabled
 61  
 {
 62  
     /** The Plexus Sink Role. */
 63  
     String ROLE = Sink.class.getName();
 64  
 
 65  
     /**
 66  
      * A numbering to handle a number list.
 67  
      * @see #numberedList(int,SinkEventAttributes)
 68  
      */
 69  
     int NUMBERING_DECIMAL = 0;
 70  
 
 71  
     /**
 72  
      * A numbering to handle a lower alpha list.
 73  
      * @see #numberedList(int,SinkEventAttributes)
 74  
      */
 75  
     int NUMBERING_LOWER_ALPHA = 1;
 76  
 
 77  
     /**
 78  
      * A numbering to handle a upper alpha list.
 79  
      * @see #numberedList(int,SinkEventAttributes)
 80  
      */
 81  
     int NUMBERING_UPPER_ALPHA = 2;
 82  
 
 83  
     /**
 84  
      * A numbering to handle a lower roman list.
 85  
      * @see #numberedList(int,SinkEventAttributes)
 86  
      */
 87  
     int NUMBERING_LOWER_ROMAN = 3;
 88  
 
 89  
     /**
 90  
      * A numbering to handle a upper roman list.
 91  
      * @see #numberedList(int,SinkEventAttributes)
 92  
      */
 93  
     int NUMBERING_UPPER_ROMAN = 4;
 94  
 
 95  
     /**
 96  
      * A level 1 section (section).
 97  
      * @see #section(int,SinkEventAttributes)
 98  
      */
 99  
     int SECTION_LEVEL_1 = 1;
 100  
 
 101  
     /**
 102  
      * A level 2 section (subsection).
 103  
      * @see #section(int,SinkEventAttributes)
 104  
      */
 105  
     int SECTION_LEVEL_2 = 2;
 106  
 
 107  
     /**
 108  
      * A level 3 section (sub-subsection).
 109  
      * @see #section(int,SinkEventAttributes)
 110  
      */
 111  
     int SECTION_LEVEL_3 = 3;
 112  
 
 113  
     /**
 114  
      * A level 4 section (sub-sub-subsection).
 115  
      * @see #section(int,SinkEventAttributes)
 116  
      */
 117  
     int SECTION_LEVEL_4 = 4;
 118  
 
 119  
     /**
 120  
      * A level 5 section (sub-sub-sub-subsection).
 121  
      * @see #section(int,SinkEventAttributes)
 122  
      */
 123  
     int SECTION_LEVEL_5 = 5;
 124  
 
 125  
     /**
 126  
      * Center alignment for table cells.
 127  
      * @see #tableRows(int[], boolean)
 128  
      */
 129  
     int JUSTIFY_CENTER = 0;
 130  
 
 131  
     /**
 132  
      * Left alignment for table cells.
 133  
      * @see #tableRows(int[], boolean)
 134  
      */
 135  
     int JUSTIFY_LEFT = 1;
 136  
 
 137  
     /**
 138  
      * Right alignment for table cells.
 139  
      * @see #tableRows(int[], boolean)
 140  
      */
 141  
     int JUSTIFY_RIGHT = 2;
 142  
 
 143  
     /**
 144  
      * Starts the head element.
 145  
      *
 146  
      * @see #head(SinkEventAttributes)
 147  
      */
 148  
     void head();
 149  
 
 150  
     /**
 151  
      * Starts the head element.
 152  
      *
 153  
      * <p>
 154  
      *   This contains information about the current document, (eg its title) that is not
 155  
      *   considered document content. The head element is optional but if it exists, it has to be
 156  
      *   unique within a sequence of Sink events that produces one output document, and it has
 157  
      *   to come before the {@link #body(SinkEventAttributes)} element.
 158  
      * </p>
 159  
      * <p>
 160  
      *   The canonical sequence of events for the head element is:
 161  
      * </p>
 162  
      * <pre>
 163  
      *   sink.head();
 164  
      *
 165  
      *   sink.title();
 166  
      *   sink.text( "Title" );
 167  
      *   sink.title_();
 168  
      *
 169  
      *   sink.author();
 170  
      *   sink.text( "Author" );
 171  
      *   sink.author_();
 172  
      *
 173  
      *   sink.date();
 174  
      *   sink.text( "Date" );
 175  
      *   sink.date_();
 176  
      *
 177  
      *   sink.head_();
 178  
      * </pre>
 179  
      * <p>
 180  
      *   but none of the enclosed events is required.  However, if they exist they have to occur
 181  
      *   in the order shown, and the title() and date() events have to be unique (author() events
 182  
      *   may occur any number of times).
 183  
      * </p>
 184  
      * <p>
 185  
      *   Supported attributes are:
 186  
      * </p>
 187  
      * <blockquote>
 188  
      *   {@link SinkEventAttributes#PROFILE PROFILE}, {@link SinkEventAttributes#LANG LANG}.
 189  
      * </blockquote>
 190  
      *
 191  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 192  
      * @since 1.1
 193  
      */
 194  
     void head( SinkEventAttributes attributes );
 195  
 
 196  
     /**
 197  
      * Ends the head element.
 198  
      */
 199  
     void head_();
 200  
 
 201  
     /**
 202  
      * Starts the title element.
 203  
      *
 204  
      * @see #title(SinkEventAttributes)
 205  
      */
 206  
     void title();
 207  
 
 208  
     /**
 209  
      * Starts the title element. This is used to identify the document.
 210  
      *
 211  
      * <p>
 212  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 213  
      * </p>
 214  
      *
 215  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 216  
      * @since 1.1
 217  
      * @see #head(SinkEventAttributes)
 218  
      */
 219  
     void title( SinkEventAttributes attributes );
 220  
 
 221  
     /**
 222  
      * Ends the title element.
 223  
      */
 224  
     void title_();
 225  
 
 226  
     /**
 227  
      * Starts an author element.
 228  
      *
 229  
      * @see #author(SinkEventAttributes)
 230  
      */
 231  
     void author();
 232  
 
 233  
     /**
 234  
      * Starts an author element. This is used to identify the author of the document.
 235  
      *
 236  
      * <p>
 237  
      *   Supported attributes are: {@link SinkEventAttributes#EMAIL EMAIL}.
 238  
      * </p>
 239  
      *
 240  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 241  
      * @since 1.1
 242  
      * @see #head(SinkEventAttributes)
 243  
      */
 244  
     void author( SinkEventAttributes attributes );
 245  
 
 246  
     /**
 247  
      * Ends an author element.
 248  
      */
 249  
     void author_();
 250  
 
 251  
     /**
 252  
      * Starts the date element.
 253  
      * <br/>
 254  
      * The date is recommended (but it is not a requirement) to be align to the
 255  
      * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26780">ISO-8601</a>
 256  
      * standard, i.e.:
 257  
      * <pre>
 258  
      * YYYY-MM-DD
 259  
      * </pre>
 260  
      * where
 261  
      * <ul>
 262  
      * <li>YYYY is the year in the Gregorian calendar</li>
 263  
      * <li>MM is the month of the year between 01 (January) and 12 (December)</li>
 264  
      * <li>and DD is the day of the month between 01 and 31</li>
 265  
      * </ul>
 266  
      *
 267  
      * @see #date(SinkEventAttributes)
 268  
      */
 269  
     void date();
 270  
 
 271  
     /**
 272  
      * Starts the date element. This is used to identify the date of the document.
 273  
      *
 274  
      * <p>
 275  
      *   Supported attributes are: none.
 276  
      * </p>
 277  
      *
 278  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 279  
      * @since 1.1
 280  
      * @see #head(SinkEventAttributes)
 281  
      */
 282  
     void date( SinkEventAttributes attributes );
 283  
 
 284  
     /**
 285  
      * Ends the date element.
 286  
      */
 287  
     void date_();
 288  
 
 289  
     /**
 290  
      * Starts the body of a document.
 291  
      *
 292  
      * @see #body(SinkEventAttributes)
 293  
      */
 294  
     void body();
 295  
 
 296  
     /**
 297  
      * Starts the body of a document. This contains the document's content.
 298  
      *
 299  
      * <p>
 300  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 301  
      * </p>
 302  
      *
 303  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 304  
      * @since 1.1
 305  
      * @see #head(SinkEventAttributes)
 306  
      */
 307  
     void body( SinkEventAttributes attributes );
 308  
 
 309  
     /**
 310  
      * Ends the body element.
 311  
      */
 312  
     void body_();
 313  
 
 314  
     /**
 315  
      * Starts a title heading element.
 316  
      */
 317  
     void sectionTitle();
 318  
 
 319  
     /**
 320  
      * Ends a title heading element.
 321  
      */
 322  
     void sectionTitle_();
 323  
 
 324  
     /**
 325  
      * Starts a first heading element which contains the topic of the section.
 326  
      *
 327  
      * @see #section(int,SinkEventAttributes)
 328  
      */
 329  
     void section1();
 330  
 
 331  
     /**
 332  
      * Ends a first heading element.
 333  
      */
 334  
     void section1_();
 335  
 
 336  
     /**
 337  
      * Starts a first title heading element. This element is optional, but if it exists,
 338  
      * it has to be contained, and be the first element, within a {@link #section1()} element.
 339  
      *
 340  
      * @see #sectionTitle(int,SinkEventAttributes)
 341  
      */
 342  
     void sectionTitle1();
 343  
 
 344  
     /**
 345  
      * Ends a first title heading element.
 346  
      */
 347  
     void sectionTitle1_();
 348  
 
 349  
     /**
 350  
      * Starts a second heading element which contains the topic of the section.
 351  
      * This has to be contained within a {@link #section1()} element.
 352  
      *
 353  
      * @see #section(int,SinkEventAttributes)
 354  
      */
 355  
     void section2();
 356  
 
 357  
     /**
 358  
      * Ends a second heading element.
 359  
      */
 360  
     void section2_();
 361  
 
 362  
     /**
 363  
      * Starts a second title heading element. This element is optional, but if it exists,
 364  
      * it has to be contained, and be the first element, within a {@link #section2()} element.
 365  
      *
 366  
      * @see #sectionTitle(int,SinkEventAttributes)
 367  
      */
 368  
     void sectionTitle2();
 369  
 
 370  
     /**
 371  
      * Ends a second title heading element.
 372  
      */
 373  
     void sectionTitle2_();
 374  
 
 375  
     /**
 376  
      * Starts a third heading element which contains the topic of the section.
 377  
      * This has to be contained within a {@link #section2()} element.
 378  
      *
 379  
      * @see #section(int,SinkEventAttributes)
 380  
      */
 381  
     void section3();
 382  
 
 383  
     /**
 384  
      * Ends a third heading element.
 385  
      */
 386  
     void section3_();
 387  
 
 388  
     /**
 389  
      * Starts a third title heading element. This element is optional, but if it exists,
 390  
      * it has to be contained, and be the first element, within a {@link #section3()} element.
 391  
      *
 392  
      * @see #sectionTitle(int,SinkEventAttributes)
 393  
      */
 394  
     void sectionTitle3();
 395  
 
 396  
     /**
 397  
      * Ends a third title heading element.
 398  
      */
 399  
     void sectionTitle3_();
 400  
 
 401  
     /**
 402  
      * Starts a 4th heading element which contains the topic of the section.
 403  
      * This has to be contained within a {@link #section3()} element.
 404  
      *
 405  
      * @see #section(int,SinkEventAttributes)
 406  
      */
 407  
     void section4();
 408  
 
 409  
     /**
 410  
      * Ends a 4th heading element.
 411  
      */
 412  
     void section4_();
 413  
 
 414  
     /**
 415  
      * Starts a 4th title heading element. This element is optional, but if it exists,
 416  
      * it has to be contained, and be the first element, within a {@link #section4()} element.
 417  
      *
 418  
      * @see #sectionTitle(int,SinkEventAttributes)
 419  
      */
 420  
     void sectionTitle4();
 421  
 
 422  
     /**
 423  
      * Ends a 4th title heading element.
 424  
      */
 425  
     void sectionTitle4_();
 426  
 
 427  
     /**
 428  
      * Starts a 5th heading element which contains the topic of the section.
 429  
      * This has to be contained within a {@link #section4()} element.
 430  
      *
 431  
      * @see #section(int,SinkEventAttributes)
 432  
      */
 433  
     void section5();
 434  
 
 435  
     /**
 436  
      * Ends a 5th heading element.
 437  
      */
 438  
     void section5_();
 439  
 
 440  
     /**
 441  
      * Starts a 5th title heading element. This element is optional, but if it exists,
 442  
      * it has to be contained, and be the first element, within a {@link #section5()} element.
 443  
      *
 444  
      * @see #sectionTitle(int,SinkEventAttributes)
 445  
      */
 446  
     void sectionTitle5();
 447  
 
 448  
     /**
 449  
      * Ends a 5th title heading element.
 450  
      */
 451  
     void sectionTitle5_();
 452  
 
 453  
     /**
 454  
      * Start a new section at the given level.
 455  
      *
 456  
      * <p>
 457  
      *   Sections with higher level have to be entirely contained within sections of lower level.
 458  
      * </p>
 459  
      * <p>
 460  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 461  
      * </p>
 462  
      *
 463  
      * @param level the section level.
 464  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 465  
      * @since 1.1
 466  
      */
 467  
     void section( int level, SinkEventAttributes attributes );
 468  
 
 469  
     /**
 470  
      * Ends a section at the given level.
 471  
      *
 472  
      * @param level the section level.
 473  
      * @since 1.1
 474  
      */
 475  
     void section_( int level );
 476  
 
 477  
     /**
 478  
      * Start a new section title at the given level.
 479  
      *
 480  
      * <p>
 481  
      *    This element is optional, but if it exists, it has to be contained, and be the first
 482  
      *    element, within a corresponding {@link #section(int,SinkEventAttributes) section}
 483  
      *    element of the same level.
 484  
      * </p>
 485  
      * <p>
 486  
      *   <b>NOTE:</b> It is strongly recommended not to make section titles implicit anchors.
 487  
      *   Neither Parsers nor Sinks should insert any content that is not explicitly present
 488  
      *   in the original source document, as this would lead to undefined behaviour for
 489  
      *   multi-format processing chains. However, while Parsers <b>must never</b> emit anchors
 490  
      *   for section titles, some specialized Sinks may implement such a feature if the resulting
 491  
      *   output documents are not going to be further processed (and this is properly documented).
 492  
      * </p>
 493  
      * <p>
 494  
      *   Supported attributes are the {@link SinkEventAttributes base attributes} plus
 495  
      *   {@link SinkEventAttributes#ALIGN ALIGN}.
 496  
      * </p>
 497  
      *
 498  
      * @param level the section title level.
 499  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 500  
      * @since 1.1
 501  
      */
 502  
     void sectionTitle( int level, SinkEventAttributes attributes );
 503  
 
 504  
     /**
 505  
      * Ends a section title at the given level.
 506  
      *
 507  
      * @param level the section title level.
 508  
      * @since 1.1
 509  
      */
 510  
     void sectionTitle_( int level );
 511  
 
 512  
     /**
 513  
      * Starts an unordered list element.
 514  
      *
 515  
      * @see #list(SinkEventAttributes)
 516  
      */
 517  
     void list();
 518  
 
 519  
     /**
 520  
      * Starts an unordered list.
 521  
      *
 522  
      * <p>
 523  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 524  
      * </p>
 525  
      *
 526  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 527  
      * @since 1.1
 528  
      */
 529  
     void list( SinkEventAttributes attributes );
 530  
 
 531  
     /**
 532  
      * Ends an unordered list element.
 533  
      */
 534  
     void list_();
 535  
 
 536  
     /**
 537  
      * Starts a list item element within an unordered list.
 538  
      *
 539  
      * @see #listItem(SinkEventAttributes)
 540  
      */
 541  
     void listItem();
 542  
 
 543  
     /**
 544  
      * Starts a list item element within an unordered list.
 545  
      *
 546  
      * <p>
 547  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 548  
      * </p>
 549  
      *
 550  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 551  
      * @since 1.1
 552  
      */
 553  
     void listItem( SinkEventAttributes attributes );
 554  
 
 555  
     /**
 556  
      * Ends a list item element within an unordered list.
 557  
      */
 558  
     void listItem_();
 559  
 
 560  
     /**
 561  
      * Starts an ordered list element.
 562  
      *
 563  
      * @param numbering the numbering style.
 564  
      * @see #numberedList(int,SinkEventAttributes)
 565  
      */
 566  
     void numberedList( int numbering );
 567  
 
 568  
     /**
 569  
      * Starts an ordered list element.
 570  
      *
 571  
      * <p>
 572  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 573  
      * </p>
 574  
      *
 575  
      * @param numbering the numbering style.
 576  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 577  
      * @since 1.1
 578  
      * @see #NUMBERING_DECIMAL
 579  
      * @see #NUMBERING_LOWER_ALPHA
 580  
      * @see #NUMBERING_LOWER_ROMAN
 581  
      * @see #NUMBERING_UPPER_ALPHA
 582  
      * @see #NUMBERING_UPPER_ROMAN
 583  
      */
 584  
     void numberedList( int numbering, SinkEventAttributes attributes );
 585  
 
 586  
     /**
 587  
      * Ends an ordered list element.
 588  
      */
 589  
     void numberedList_();
 590  
 
 591  
     /**
 592  
      * Starts a list item element within an ordered list.
 593  
      *
 594  
      * @see #numberedListItem(SinkEventAttributes)
 595  
      */
 596  
     void numberedListItem();
 597  
 
 598  
     /**
 599  
      * Starts a list item element within an ordered list.
 600  
      *
 601  
      * <p>
 602  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 603  
      * </p>
 604  
      *
 605  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 606  
      * @since 1.1
 607  
      */
 608  
     void numberedListItem( SinkEventAttributes attributes );
 609  
 
 610  
     /**
 611  
      * Ends a list item element within an ordered list.
 612  
      */
 613  
     void numberedListItem_();
 614  
 
 615  
     /**
 616  
      * Starts a definition list element.
 617  
      *
 618  
      * @see #definitionList(SinkEventAttributes)
 619  
      */
 620  
     void definitionList();
 621  
 
 622  
     /**
 623  
      * Starts a definition list.
 624  
      *
 625  
      * <p>
 626  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 627  
      * </p>
 628  
      *
 629  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 630  
      * @since 1.1
 631  
      */
 632  
     void definitionList( SinkEventAttributes attributes );
 633  
 
 634  
     /**
 635  
      * Ends a definition list element.
 636  
      */
 637  
     void definitionList_();
 638  
 
 639  
     /**
 640  
      * Starts a list item element within a definition list.
 641  
      *
 642  
      * @see #definitionListItem(SinkEventAttributes)
 643  
      */
 644  
     void definitionListItem();
 645  
 
 646  
     /**
 647  
      * Starts a list item element within a definition list.
 648  
      *
 649  
      * <p>
 650  
      *   Every definitionListItem has to contain exactly one {@link #definedTerm(SinkEventAttributes)}
 651  
      *   and one {@link #definition(SinkEventAttributes)}, in this order.
 652  
      * </p>
 653  
      * <p>
 654  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 655  
      * </p>
 656  
      *
 657  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 658  
      * @since 1.1
 659  
      */
 660  
     void definitionListItem( SinkEventAttributes attributes );
 661  
 
 662  
     /**
 663  
      * Ends a list item element within a definition list.
 664  
      */
 665  
     void definitionListItem_();
 666  
 
 667  
     /**
 668  
      * Starts a definition element within a definition list.
 669  
      *
 670  
      * @see #definition(SinkEventAttributes)
 671  
      */
 672  
     void definition();
 673  
 
 674  
     /**
 675  
      * Starts a definition element within a definition list.
 676  
      *
 677  
      * <p>
 678  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 679  
      * </p>
 680  
      *
 681  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 682  
      * @since 1.1
 683  
      */
 684  
     void definition( SinkEventAttributes attributes );
 685  
 
 686  
     /**
 687  
      * Ends a definition element within a definition list.
 688  
      */
 689  
     void definition_();
 690  
 
 691  
     /**
 692  
      * Starts a definition term element within a definition list.
 693  
      *
 694  
      * @see #definedTerm(SinkEventAttributes)
 695  
      */
 696  
     void definedTerm();
 697  
 
 698  
     /**
 699  
      * Starts a definition term element within a definition list.
 700  
      *
 701  
      * <p>
 702  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 703  
      * </p>
 704  
      *
 705  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 706  
      * @since 1.1
 707  
      */
 708  
     void definedTerm( SinkEventAttributes attributes );
 709  
 
 710  
     /**
 711  
      * Starts a definition term element within a definition list.
 712  
      */
 713  
     void definedTerm_();
 714  
 
 715  
     /**
 716  
      * Starts a basic image embedding element.
 717  
      *
 718  
      * @see #figure(SinkEventAttributes)
 719  
      */
 720  
     void figure();
 721  
 
 722  
     /**
 723  
      * Starts a basic image embedding element.
 724  
      *
 725  
      * <p>
 726  
      *   The canonical sequence of events for the figure element is:
 727  
      * </p>
 728  
      * <pre>
 729  
      *   sink.figure();
 730  
      *
 731  
      *   sink.figureGraphics( "figure.png" );
 732  
      *
 733  
      *   sink.figureCaption();
 734  
      *   sink.text( "Figure caption",);
 735  
      *   sink.figureCaption_();
 736  
      *
 737  
      *   sink.figure_();
 738  
      * </pre>
 739  
      * <p>
 740  
      *   where the figureCaption element is optional.
 741  
      * </p>
 742  
      * <p>
 743  
      *   However, <strong>NOTE</strong> that the order of figureCaption and
 744  
      *   figureGraphics events is arbitrary,
 745  
      *   ie a parser may emit the figureCaption before or after the figureGraphics.
 746  
      *   Implementing sinks should be prepared to handle both possibilities.
 747  
      * </p>
 748  
      * <p>
 749  
      *   <strong>NOTE</strong> also that the figureGraphics() event does not have to be embedded
 750  
      *   inside figure(), in particular for in-line images the figureGraphics() should be used
 751  
      *   stand-alone (in HTML language, figureGraphics() produces a <code>&lt;img&gt;</code>
 752  
      *   tag, while figure() opens a paragraph- or <code>&lt;div&gt;</code>- like environment).
 753  
      * </p>
 754  
      * <p>
 755  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 756  
      * </p>
 757  
      *
 758  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 759  
      * @since 1.1
 760  
      */
 761  
     void figure( SinkEventAttributes attributes );
 762  
 
 763  
     /**
 764  
      * Ends a basic image embedding element.
 765  
      */
 766  
     void figure_();
 767  
 
 768  
     /**
 769  
      * Starts a caption of an image element.
 770  
      *
 771  
      * @see #figureCaption(SinkEventAttributes)
 772  
      */
 773  
     void figureCaption();
 774  
 
 775  
     /**
 776  
      * Starts a figure caption.
 777  
      *
 778  
      * <p>
 779  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 780  
      * </p>
 781  
      *
 782  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 783  
      * @since 1.1
 784  
      * @see #figure(SinkEventAttributes)
 785  
      */
 786  
     void figureCaption( SinkEventAttributes attributes );
 787  
 
 788  
     /**
 789  
      * Ends a caption of an image.
 790  
      */
 791  
     void figureCaption_();
 792  
 
 793  
     /**
 794  
      * Adding a source of a graphic.
 795  
      *
 796  
      * @param name the source
 797  
      */
 798  
     void figureGraphics( String name );
 799  
 
 800  
     /**
 801  
      * Adds a graphic element.
 802  
      *
 803  
      * <p>
 804  
      *   The <code>src</code> parameter should be a valid link, ie it can be an absolute
 805  
      *   URL or a link relative to the current source document.
 806  
      * </p>
 807  
      * <p>
 808  
      *   Supported attributes are the {@link SinkEventAttributes base attributes} plus:
 809  
      * </p>
 810  
      * <blockquote>
 811  
      *   {@link SinkEventAttributes#SRC SRC}, {@link SinkEventAttributes#ALT ALT},
 812  
      *   {@link SinkEventAttributes#WIDTH WIDTH}, {@link SinkEventAttributes#HEIGHT HEIGHT},
 813  
      *   {@link SinkEventAttributes#ALIGN ALIGN}, {@link SinkEventAttributes#BORDER BORDER},
 814  
      *   {@link SinkEventAttributes#HSPACE HSPACE}, {@link SinkEventAttributes#VSPACE VSPACE},
 815  
      *   {@link SinkEventAttributes#ISMAP ISMAP}, {@link SinkEventAttributes#USEMAP USEMAP}.
 816  
      * </blockquote>
 817  
      * <p>
 818  
      *   If the {@link SinkEventAttributes#SRC SRC} attribute is specified in SinkEventAttributes,
 819  
      *   it will be overridden by the <code>src</code> parameter.
 820  
      * </p>
 821  
      *
 822  
      * @param src the image source, a valid URL.
 823  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 824  
      * @since 1.1
 825  
      * @see #figure(SinkEventAttributes)
 826  
      */
 827  
     void figureGraphics( String src, SinkEventAttributes attributes );
 828  
 
 829  
     /**
 830  
      * Starts a table element for marking up tabular information in a document.
 831  
      *
 832  
      * @see #table(SinkEventAttributes)
 833  
      */
 834  
     void table();
 835  
 
 836  
     /**
 837  
      * Starts a table.
 838  
      *
 839  
      * <p>
 840  
      *   The canonical sequence of events for the table element is:
 841  
      * </p>
 842  
      * <pre>
 843  
      *   sink.table();
 844  
      *
 845  
      *   sink.tableRows( justify, true );
 846  
      *
 847  
      *   sink.tableRow();
 848  
      *   sink.tableCell();
 849  
      *   sink.text( "cell 1,1" );
 850  
      *   sink.tableCell_();
 851  
      *   sink.tableCell();
 852  
      *   sink.text( "cell 1,2" );
 853  
      *   sink.tableCell_();
 854  
      *   sink.tableRow_();
 855  
      *
 856  
      *   sink.tableRows_();
 857  
      *
 858  
      *   sink.tableCaption();
 859  
      *   sink.text( "Table caption" );
 860  
      *   sink.tableCaption_();
 861  
      *
 862  
      *   sink.table_();
 863  
      *
 864  
      * </pre>
 865  
      * <p>
 866  
      *   where the tableCaption element is optional.
 867  
      * </p>
 868  
      * <p>
 869  
      *   However, <strong>NOTE</strong> that the order of tableCaption and
 870  
      *   {@link #tableRows(int[],boolean)} events is arbitrary,
 871  
      *   ie a parser may emit the tableCaption before or after the tableRows.
 872  
      *   Implementing sinks should be prepared to handle both possibilities.
 873  
      * </p>
 874  
      * <p>
 875  
      *   Supported attributes are the {@link SinkEventAttributes base attributes} plus:
 876  
      * </p>
 877  
      * <blockquote>
 878  
      *   {@link SinkEventAttributes#ALIGN ALIGN}, {@link SinkEventAttributes#BGCOLOR BGCOLOR},
 879  
      *   {@link SinkEventAttributes#BORDER BORDER}, {@link SinkEventAttributes#CELLPADDING CELLPADDING},
 880  
      *   {@link SinkEventAttributes#CELLSPACING CELLSPACING}, {@link SinkEventAttributes#FRAME FRAME},
 881  
      *   {@link SinkEventAttributes#RULES RULES}, {@link SinkEventAttributes#SUMMARY SUMMARY},
 882  
      *   {@link SinkEventAttributes#WIDTH WIDTH}.
 883  
      * </blockquote>
 884  
      *
 885  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 886  
      * @since 1.1
 887  
      */
 888  
     void table( SinkEventAttributes attributes );
 889  
 
 890  
     /**
 891  
      * Ends a table element.
 892  
      */
 893  
     void table_();
 894  
 
 895  
     /**
 896  
      * Starts an element that contains rows of table data.
 897  
      *
 898  
      * @param justification the default justification of columns.
 899  
      * This can be overridden by individual table rows or table cells.
 900  
      * If null a left alignment is assumed by default. If this array
 901  
      * has less elements than there are columns in the table then the value of
 902  
      * the last array element will be taken as default for the remaining table cells.
 903  
      * @param grid true to provide a grid, false otherwise.
 904  
      * @see #table(SinkEventAttributes)
 905  
      * @see #JUSTIFY_CENTER
 906  
      * @see #JUSTIFY_LEFT
 907  
      * @see #JUSTIFY_RIGHT
 908  
      */
 909  
     void tableRows( int[] justification, boolean grid );
 910  
 
 911  
     /**
 912  
      * Ends an element that contains rows of table data.
 913  
      */
 914  
     void tableRows_();
 915  
 
 916  
     /**
 917  
      * Starts a row element which acts as a container for a row of table cells.
 918  
      *
 919  
      * @see #tableRow(SinkEventAttributes)
 920  
      */
 921  
     void tableRow();
 922  
 
 923  
     /**
 924  
      * Starts a table row.
 925  
      *
 926  
      * <p>
 927  
      *   Supported attributes are the {@link SinkEventAttributes base attributes} plus:
 928  
      * </p>
 929  
      * <blockquote>
 930  
      *   {@link SinkEventAttributes#ALIGN ALIGN}, {@link SinkEventAttributes#BGCOLOR BGCOLOR},
 931  
      *   {@link SinkEventAttributes#VALIGN VALIGN}.
 932  
      * </blockquote>
 933  
      *
 934  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 935  
      * @since 1.1
 936  
      */
 937  
     void tableRow( SinkEventAttributes attributes );
 938  
 
 939  
     /**
 940  
      * Ends a row element.
 941  
      */
 942  
     void tableRow_();
 943  
 
 944  
     /**
 945  
      * Starts a cell element which defines a cell that contains data.
 946  
      *
 947  
      * @see #tableCell(SinkEventAttributes)
 948  
      */
 949  
     void tableCell();
 950  
 
 951  
     /**
 952  
      * Starts a cell element which defines a cell that contains data.
 953  
      *
 954  
      * @param width the size of the cell.
 955  
      * @deprecated Use #tableCell(SinkEventAttributes) instead.
 956  
      */
 957  
     void tableCell( String width );
 958  
 
 959  
     /**
 960  
      * Starts a table cell.
 961  
      *
 962  
      * <p>
 963  
      *   Supported attributes are the {@link SinkEventAttributes base attributes} plus:
 964  
      * </p>
 965  
      * <blockquote>
 966  
      *   {@link SinkEventAttributes#ABBRV ABBRV}, {@link SinkEventAttributes#ALIGN ALIGN},
 967  
      *   {@link SinkEventAttributes#AXIS AXIS}, {@link SinkEventAttributes#BGCOLOR BGCOLOR},
 968  
      *   {@link SinkEventAttributes#COLSPAN COLSPAN}, {@link SinkEventAttributes#HEADERS HEADERS},
 969  
      *   {@link SinkEventAttributes#HEIGHT HEIGHT}, {@link SinkEventAttributes#NOWRAP NOWRAP},
 970  
      *   {@link SinkEventAttributes#ROWSPAN ROWSPAN}, {@link SinkEventAttributes#SCOPE SCOPE},
 971  
      *   {@link SinkEventAttributes#VALIGN VALIGN}, {@link SinkEventAttributes#WIDTH WIDTH}.
 972  
      * </blockquote>
 973  
      *
 974  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 975  
      * @since 1.1
 976  
      */
 977  
     void tableCell( SinkEventAttributes attributes );
 978  
 
 979  
     /**
 980  
      * Ends a cell element.
 981  
      */
 982  
     void tableCell_();
 983  
 
 984  
     /**
 985  
      * Starts a cell element which defines a cell that contains header information.
 986  
      *
 987  
      * @see #tableHeaderCell(SinkEventAttributes)
 988  
      */
 989  
     void tableHeaderCell();
 990  
 
 991  
     /**
 992  
      * Starts a cell element which defines a cell that contains header information.
 993  
      *
 994  
      * @param width the size of the header cell.
 995  
      * @deprecated Use #tableHeaderCell(SinkEventAttributes) instead.
 996  
      */
 997  
     void tableHeaderCell( String width );
 998  
 
 999  
     /**
 1000  
      * Starts a table header cell.
 1001  
      *
 1002  
      * <p>
 1003  
      *   Supported attributes are the same as for {@link #tableCell(SinkEventAttributes) tableCell}.
 1004  
      * </p>
 1005  
      *
 1006  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 1007  
      * @since 1.1
 1008  
      */
 1009  
     void tableHeaderCell( SinkEventAttributes attributes );
 1010  
 
 1011  
     /**
 1012  
      * Ends a cell header element.
 1013  
      */
 1014  
     void tableHeaderCell_();
 1015  
 
 1016  
     /**
 1017  
      * Starts a caption element of a table.
 1018  
      *
 1019  
      * @see #tableCaption(SinkEventAttributes)
 1020  
      */
 1021  
     void tableCaption();
 1022  
 
 1023  
     /**
 1024  
      * Starts a table caption.
 1025  
      *
 1026  
      * <p>
 1027  
      *   Note that the order of tableCaption and
 1028  
      *   {@link #tableRows(int[],boolean)} events is arbitrary,
 1029  
      *   ie a parser may emit the tableCaption before or after the tableRows.
 1030  
      *   Implementing sinks should be prepared to handle both possibilities.
 1031  
      * </p>
 1032  
      * <p>
 1033  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}
 1034  
      *   plus {@link SinkEventAttributes#ALIGN ALIGN}.
 1035  
      * </p>
 1036  
      *
 1037  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 1038  
      * @since 1.1
 1039  
      * @see #table(SinkEventAttributes)
 1040  
      */
 1041  
     void tableCaption( SinkEventAttributes attributes );
 1042  
 
 1043  
     /**
 1044  
      * Ends a caption element of a table.
 1045  
      */
 1046  
     void tableCaption_();
 1047  
 
 1048  
     /**
 1049  
      * Starts an element which represents a paragraph.
 1050  
      *
 1051  
      * @see #paragraph(SinkEventAttributes)
 1052  
      */
 1053  
     void paragraph();
 1054  
 
 1055  
     /**
 1056  
      * Starts a paragraph.
 1057  
      *
 1058  
      * <p>
 1059  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}
 1060  
      *   plus {@link SinkEventAttributes#ALIGN ALIGN}.
 1061  
      * </p>
 1062  
      *
 1063  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 1064  
      * @since 1.1
 1065  
      */
 1066  
     void paragraph( SinkEventAttributes attributes );
 1067  
 
 1068  
     /**
 1069  
      * Ends a paragraph element.
 1070  
      */
 1071  
     void paragraph_();
 1072  
 
 1073  
     /**
 1074  
      * Starts an element which indicates that whitespace in the enclosed text has semantic relevance.
 1075  
      *
 1076  
      * @param boxed true to add a box, false otherwise
 1077  
      * @deprecated Use #verbatim(SinkEventAttributes) instead.
 1078  
      */
 1079  
     void verbatim( boolean boxed );
 1080  
 
 1081  
     /**
 1082  
      * Starts a verbatim block, ie a block where whitespace has semantic relevance.
 1083  
      *
 1084  
      * <p>
 1085  
      *   Text in a verbatim block must only be wrapped at the linebreaks in the source,
 1086  
      *   and spaces should not be collapsed. It should be displayed in a fixed-width font to
 1087  
      *   retain the formatting but the overall size may be chosen by the implementation.
 1088  
      * </p>
 1089  
      *
 1090  
      * <p>
 1091  
      *   Most Sink events may be emitted within a verbatim block, the only elements explicitly
 1092  
      *   forbidden are font-changing events and figures. Also, verbatim blocks may not be nested.
 1093  
      * </p>
 1094  
      *
 1095  
      * <p>
 1096  
      *   Supported attributes are the {@link SinkEventAttributes base attributes} plus:
 1097  
      * </p>
 1098  
      * <blockquote>
 1099  
      *   {@link SinkEventAttributes#DECORATION DECORATION} (value: "boxed"),
 1100  
      *   {@link SinkEventAttributes#ALIGN ALIGN}, {@link SinkEventAttributes#WIDTH WIDTH}.
 1101  
      * </blockquote>
 1102  
      *
 1103  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 1104  
      * @since 1.1
 1105  
      */
 1106  
     void verbatim( SinkEventAttributes attributes );
 1107  
 
 1108  
     /**
 1109  
      * Ends a verbatim element.
 1110  
      */
 1111  
     void verbatim_();
 1112  
 
 1113  
     /**
 1114  
      * Adding a separator of sections from a text to each other.
 1115  
      *
 1116  
      * @see #horizontalRule(SinkEventAttributes)
 1117  
      */
 1118  
     void horizontalRule();
 1119  
 
 1120  
     /**
 1121  
      * Adds a horizontal separator rule.
 1122  
      *
 1123  
      * <p>
 1124  
      *   Supported attributes are the {@link SinkEventAttributes base attributes} plus:
 1125  
      * </p>
 1126  
      * <blockquote>
 1127  
      *   {@link SinkEventAttributes#ALIGN ALIGN}, {@link SinkEventAttributes#NOSHADE NOSHADE},
 1128  
      *   {@link SinkEventAttributes#SIZE SIZE}, {@link SinkEventAttributes#WIDTH WIDTH}.
 1129  
      * </blockquote>
 1130  
      *
 1131  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 1132  
      * @since 1.1
 1133  
      */
 1134  
     void horizontalRule( SinkEventAttributes attributes );
 1135  
 
 1136  
     /**
 1137  
      * Adding a new page separator.
 1138  
      */
 1139  
     void pageBreak();
 1140  
 
 1141  
     /**
 1142  
      * Starts an element which defines an anchor.
 1143  
      *
 1144  
      * @param name the name of the anchor.
 1145  
      * @see #anchor(String,SinkEventAttributes)
 1146  
      */
 1147  
     void anchor( String name );
 1148  
 
 1149  
     /**
 1150  
      * Starts an element which defines an anchor.
 1151  
      *
 1152  
      * <p>
 1153  
      *   The <code>name</code> parameter has to be a valid SGML NAME token.
 1154  
      *   According to the <a href="http://www.w3.org/TR/html4/types.html#type-name">
 1155  
      *   HTML 4.01 specification section 6.2 SGML basic types</a>:
 1156  
      * </p>
 1157  
      * <p>
 1158  
      *   <i>ID and NAME tokens must begin with a letter ([A-Za-z]) and may be
 1159  
      *   followed by any number of letters, digits ([0-9]), hyphens ("-"),
 1160  
      *   underscores ("_"), colons (":"), and periods (".").</i>
 1161  
      * </p>
 1162  
      * <p>
 1163  
      *   Supported attributes are the {@link SinkEventAttributes base attributes}.
 1164  
      *   If {@link SinkEventAttributes#NAME NAME} is specified in the SinkEventAttributes,
 1165  
      *   it will be overwritten by the <code>name</code> parameter.
 1166  
      * </p>
 1167  
      *
 1168  
      * @param name the name of the anchor. This has to be a valid SGML NAME token.
 1169  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 1170  
      * @since 1.1
 1171  
      */
 1172  
     void anchor( String name, SinkEventAttributes attributes );
 1173  
 
 1174  
     /**
 1175  
      * Ends an anchor element.
 1176  
      */
 1177  
     void anchor_();
 1178  
 
 1179  
     /**
 1180  
      * Starts an element which defines a link.
 1181  
      *
 1182  
      * @param name the name of the link.
 1183  
      * @see #link(String,SinkEventAttributes)
 1184  
      */
 1185  
     void link( String name );
 1186  
 
 1187  
     /**
 1188  
      * Starts a link.
 1189  
      *
 1190  
      * <p>
 1191  
      *   The <code>name</code> parameter has to be a valid html <code>href</code>
 1192  
      *   parameter, ie for internal links (links to an anchor within the same source
 1193  
      *   document), <code>name</code> should start with the character "#".
 1194  
      * </p>
 1195  
      * <p>
 1196  
      *   Supported attributes are the {@link SinkEventAttributes base attributes} plus:
 1197  
      * </p>
 1198  
      * <blockquote>
 1199  
      *   {@link SinkEventAttributes#CHARSET CHARSET}, {@link SinkEventAttributes#COORDS COORDS},
 1200  
      *   {@link SinkEventAttributes#HREF HREF}, {@link SinkEventAttributes#HREFLANG HREFLANG},
 1201  
      *   {@link SinkEventAttributes#REL REL}, {@link SinkEventAttributes#REV REV},
 1202  
      *   {@link SinkEventAttributes#SHAPE SHAPE}, {@link SinkEventAttributes#TARGET TARGET},
 1203  
      *   {@link SinkEventAttributes#TYPE TYPE}.
 1204  
      * </blockquote>
 1205  
      * <p>
 1206  
      *   If {@link SinkEventAttributes#HREF HREF} is specified in the
 1207  
      *   SinkEventAttributes, it will be overwritten by the <code>name</code> parameter.
 1208  
      * </p>
 1209  
      *
 1210  
      * @param name the name of the link.
 1211  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 1212  
      * @since 1.1
 1213  
      */
 1214  
     void link( String name, SinkEventAttributes attributes );
 1215  
 
 1216  
     /**
 1217  
      * Ends a link element.
 1218  
      */
 1219  
     void link_();
 1220  
 
 1221  
     /**
 1222  
      * Starts an italic element.
 1223  
      *
 1224  
      * Alternatively one may use {@link #text(String,SinkEventAttributes)} with
 1225  
      *              {@link SinkEventAttributes#STYLE STYLE} instead.
 1226  
      */
 1227  
     void italic();
 1228  
 
 1229  
     /**
 1230  
      * Ends an italic element.
 1231  
      *
 1232  
      * Alternatively one may use {@link #text(String,SinkEventAttributes)} with
 1233  
      *              {@link SinkEventAttributes#STYLE STYLE} instead.
 1234  
      */
 1235  
     void italic_();
 1236  
 
 1237  
     /**
 1238  
      * Starts a bold element.
 1239  
      *
 1240  
      * Alternatively one may use {@link #text(String,SinkEventAttributes)} with
 1241  
      *              {@link SinkEventAttributes#STYLE STYLE} instead.
 1242  
      */
 1243  
     void bold();
 1244  
 
 1245  
     /**
 1246  
      * Ends a bold element.
 1247  
      *
 1248  
      * Alternatively one may use {@link #text(String,SinkEventAttributes)} with
 1249  
      *              {@link SinkEventAttributes#STYLE STYLE} instead.
 1250  
      */
 1251  
     void bold_();
 1252  
 
 1253  
     /**
 1254  
      * Starts a monospaced element.
 1255  
      *
 1256  
      * Alternatively one may use {@link #text(String,SinkEventAttributes)} with
 1257  
      *              {@link SinkEventAttributes#STYLE STYLE} instead.
 1258  
      */
 1259  
     void monospaced();
 1260  
 
 1261  
     /**
 1262  
      * Ends a monospaced element.
 1263  
      *
 1264  
      * Alternatively one may use {@link #text(String,SinkEventAttributes)} with
 1265  
      *              {@link SinkEventAttributes#STYLE STYLE} instead.
 1266  
      */
 1267  
     void monospaced_();
 1268  
 
 1269  
     /**
 1270  
      * Adds a line break.
 1271  
      *
 1272  
      * @see #lineBreak(SinkEventAttributes)
 1273  
      */
 1274  
     void lineBreak();
 1275  
 
 1276  
     /**
 1277  
      * Adds a line break.
 1278  
      *
 1279  
      * <p>
 1280  
      *   Supported attributes are:
 1281  
      * </p>
 1282  
      * <blockquote>
 1283  
      *   {@link SinkEventAttributes#ID ID}, {@link SinkEventAttributes#CLASS CLASS},
 1284  
      *   {@link SinkEventAttributes#TITLE TITLE}, {@link SinkEventAttributes#STYLE STYLE}.
 1285  
      * </blockquote>
 1286  
      *
 1287  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 1288  
      * @since 1.1
 1289  
      */
 1290  
     void lineBreak( SinkEventAttributes attributes );
 1291  
 
 1292  
     /**
 1293  
      * Adding a non breaking space, <i>ie</i> a space without any special formatting operations.
 1294  
      */
 1295  
     void nonBreakingSpace();
 1296  
 
 1297  
     /**
 1298  
      * Adding a text.
 1299  
      *
 1300  
      * @param text The text to write.
 1301  
      * @see #text(String,SinkEventAttributes)
 1302  
      */
 1303  
     void text( String text );
 1304  
 
 1305  
     /**
 1306  
      * Adds a text.
 1307  
      *
 1308  
      * <p>
 1309  
      *   The <code>text</code> parameter should contain only real content, ie any
 1310  
      *   ignorable/collapsable whitespace/EOLs or other pretty-printing should
 1311  
      *   be removed/normalized by a parser.
 1312  
      * </p>
 1313  
      * <p>
 1314  
      *   If <code>text</code> contains any variants of line terminators, they should
 1315  
      *   be normalized to the System EOL by an implementing Sink.
 1316  
      * </p>
 1317  
      * <p>
 1318  
      *   Supported attributes are the {@link SinkEventAttributes base attributes} plus
 1319  
      * </p>
 1320  
      * <blockquote>
 1321  
      *   {@link SinkEventAttributes#VALIGN VALIGN} (values "sub", "sup"),
 1322  
      *   {@link SinkEventAttributes#DECORATION DECORATION} (values "underline", "overline", "line-through"),
 1323  
      *   {@link SinkEventAttributes#STYLE STYLE} (values "italic", "bold", "monospaced").
 1324  
      * </blockquote>
 1325  
      *
 1326  
      * @param text The text to write.
 1327  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 1328  
      * @since 1.1
 1329  
      */
 1330  
     void text( String text, SinkEventAttributes attributes );
 1331  
 
 1332  
     /**
 1333  
      * Adding a raw text, <i>ie</i> a text without any special formatting operations.
 1334  
      *
 1335  
      * @param text The text to write.
 1336  
      */
 1337  
     void rawText( String text );
 1338  
 
 1339  
     /**
 1340  
      * Add a comment.
 1341  
      *
 1342  
      * @param comment The comment to write.
 1343  
      * @since 1.1
 1344  
      */
 1345  
     void comment( String comment );
 1346  
 
 1347  
     /**
 1348  
      * Add an unknown event. This may be used by parsers to notify a general Sink about
 1349  
      * an event that doesn't fit into any event defined by the Sink API.
 1350  
      * Depending on the parameters, a Sink may decide whether or not to process the event,
 1351  
      * emit it as raw text, as a comment, log it, etc.
 1352  
      *
 1353  
      * @param name The name of the event.
 1354  
      * @param requiredParams An optional array of required parameters to the event.
 1355  
      * May be <code>null</code>.
 1356  
      * @param attributes A set of {@link SinkEventAttributes}, may be <code>null</code>.
 1357  
      * @since 1.1
 1358  
      */
 1359  
     void unknown( String name, Object[] requiredParams, SinkEventAttributes attributes );
 1360  
 
 1361  
     /**
 1362  
      * Flush the writer or the stream, if needed.
 1363  
      * Flushing a previously-flushed Sink has no effect.
 1364  
      */
 1365  
     void flush();
 1366  
 
 1367  
     /**
 1368  
      * Close the writer or the stream, if needed.
 1369  
      * Closing a previously-closed Sink has no effect.
 1370  
      */
 1371  
     void close();
 1372  
 }