001package org.apache.maven.doxia.sink.impl; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022import java.io.IOException; 023import java.io.Writer; 024 025import org.apache.maven.doxia.sink.SinkEventAttributes; 026import org.apache.maven.doxia.sink.impl.AbstractSink; 027import org.apache.maven.doxia.sink.impl.SinkUtils; 028import org.slf4j.Logger; 029import org.slf4j.LoggerFactory; 030 031/** 032 * A simple text-based implementation of the <code>Sink</code> interface. 033 * Useful for testing purposes. 034 */ 035public class TextSink 036 extends AbstractSink 037{ 038 private static final Logger LOGGER = LoggerFactory.getLogger( TextSink.class ); 039 040 /** For writing the result. */ 041 private final Writer out; 042 043 /** Constructor. 044 * @param writer The writer for writing the result. 045 */ 046 public TextSink( Writer writer ) 047 { 048 this.out = writer; 049 } 050 051 052 @Override 053 public void head() 054 { 055 writeln( "begin:head" ); 056 } 057 058 @Override 059 public void head_() 060 { 061 writeln( "end:head" ); 062 } 063 064 @Override 065 public void body() 066 { 067 writeln( "begin:body" ); 068 } 069 070 @Override 071 public void body_() 072 { 073 writeln( "end:body" ); 074 } 075 076 @Override 077 public void article() 078 { 079 writeln( "begin:article" ); 080 } 081 082 @Override 083 public void article_() 084 { 085 writeln( "end:article" ); 086 } 087 088 @Override 089 public void navigation() 090 { 091 writeln( "begin:navigation" ); 092 } 093 094 @Override 095 public void navigation_() 096 { 097 writeln( "end:navigation" ); 098 } 099 100 @Override 101 public void sidebar() 102 { 103 writeln( "begin:sidebar" ); 104 } 105 106 @Override 107 public void sidebar_() 108 { 109 writeln( "end:sidebar" ); 110 } 111 112 @Override 113 public void section1() 114 { 115 write( "begin:section1" ); 116 } 117 118 @Override 119 public void section1_() 120 { 121 writeln( "end:section1" ); 122 } 123 124 @Override 125 public void section2() 126 { 127 write( "begin:section2" ); 128 } 129 130 @Override 131 public void section2_() 132 { 133 writeln( "end:section2" ); 134 } 135 136 @Override 137 public void section3() 138 { 139 write( "begin:section3" ); 140 } 141 142 @Override 143 public void section3_() 144 { 145 writeln( "end:section3" ); 146 } 147 148 @Override 149 public void section4() 150 { 151 write( "begin:section4" ); 152 } 153 154 @Override 155 public void section4_() 156 { 157 writeln( "end:section4" ); 158 } 159 160 @Override 161 public void section5() 162 { 163 write( "begin:section5" ); 164 } 165 166 @Override 167 public void section5_() 168 { 169 writeln( "end:section5" ); 170 } 171 172 @Override 173 public void section6() 174 { 175 write( "begin:section6" ); 176 } 177 178 @Override 179 public void section6_() 180 { 181 writeln( "end:section6" ); 182 } 183 184 @Override 185 public void list() 186 { 187 writeln( "begin:list" ); 188 } 189 190 @Override 191 public void list_() 192 { 193 writeln( "end:list" ); 194 } 195 196 @Override 197 public void listItem() 198 { 199 write( "begin:listItem" ); 200 } 201 202 @Override 203 public void listItem_() 204 { 205 writeln( "end:listItem" ); 206 } 207 208 @Override 209 public void numberedList( int numbering ) 210 { 211 writeln( "begin:numberedList, numbering: " + numbering ); 212 } 213 214 @Override 215 public void numberedList_() 216 { 217 writeln( "end:numberedList" ); 218 } 219 220 @Override 221 public void numberedListItem() 222 { 223 write( "begin:numberedListItem" ); 224 } 225 226 @Override 227 public void numberedListItem_() 228 { 229 writeln( "end:numberedListItem" ); 230 } 231 232 @Override 233 public void definitionList() 234 { 235 writeln( "begin:definitionList" ); 236 } 237 238 @Override 239 public void definitionList_() 240 { 241 writeln( "end:definitionList" ); 242 } 243 244 @Override 245 public void definitionListItem() 246 { 247 write( "begin:definitionListItem" ); 248 } 249 250 @Override 251 public void definitionListItem_() 252 { 253 writeln( "end:definitionListItem" ); 254 } 255 256 @Override 257 public void definition() 258 { 259 write( "begin:definition" ); 260 } 261 262 @Override 263 public void definition_() 264 { 265 writeln( "end:definition" ); 266 } 267 268 @Override 269 public void figure() 270 { 271 write( "begin:figure" ); 272 } 273 274 @Override 275 public void figure_() 276 { 277 writeln( "end:figure" ); 278 } 279 280 @Override 281 public void table() 282 { 283 writeln( "begin:table" ); 284 } 285 286 @Override 287 public void table_() 288 { 289 writeln( "end:table" ); 290 } 291 292 @Override 293 public void tableRows( int[] justification, boolean grid ) 294 { 295 writeln( "begin:tableRows" ); 296 } 297 298 @Override 299 public void tableRows_() 300 { 301 writeln( "end:tableRows" ); 302 } 303 304 @Override 305 public void tableRow() 306 { 307 write( "begin:tableRow" ); 308 } 309 310 @Override 311 public void tableRow_() 312 { 313 writeln( "end:tableRow" ); 314 } 315 316 @Override 317 public void title() 318 { 319 write( "begin:title" ); 320 } 321 322 @Override 323 public void title_() 324 { 325 writeln( "end:title" ); 326 } 327 328 @Override 329 public void author() 330 { 331 write( "begin:author" ); 332 } 333 334 @Override 335 public void author_() 336 { 337 writeln( "end:author" ); 338 } 339 340 @Override 341 public void date() 342 { 343 write( "begin:date" ); 344 } 345 346 @Override 347 public void date_() 348 { 349 writeln( "end:date" ); 350 } 351 352 @Override 353 public void sectionTitle() 354 { 355 write( "begin:sectionTitle" ); 356 } 357 358 @Override 359 public void sectionTitle_() 360 { 361 writeln( "end:sectionTitle" ); 362 } 363 364 @Override 365 public void sectionTitle1() 366 { 367 write( "begin:sectionTitle1" ); 368 } 369 370 @Override 371 public void sectionTitle1_() 372 { 373 writeln( "end:sectionTitle1" ); 374 } 375 376 @Override 377 public void sectionTitle2() 378 { 379 write( "begin:sectionTitle2" ); 380 } 381 382 @Override 383 public void sectionTitle2_() 384 { 385 writeln( "end:sectionTitle2" ); 386 } 387 388 @Override 389 public void sectionTitle3() 390 { 391 write( "begin:sectionTitle3" ); 392 } 393 394 @Override 395 public void sectionTitle3_() 396 { 397 writeln( "end:sectionTitle3" ); 398 } 399 400 @Override 401 public void sectionTitle4() 402 { 403 write( "begin:sectionTitle4" ); 404 } 405 406 @Override 407 public void sectionTitle4_() 408 { 409 writeln( "end:sectionTitle4" ); 410 } 411 412 @Override 413 public void sectionTitle5() 414 { 415 write( "begin:sectionTitle5" ); 416 } 417 418 @Override 419 public void sectionTitle5_() 420 { 421 writeln( "end:sectionTitle5" ); 422 } 423 424 @Override 425 public void sectionTitle6() 426 { 427 write( "begin:sectionTitle6" ); 428 } 429 430 @Override 431 public void sectionTitle6_() 432 { 433 writeln( "end:sectionTitle6" ); 434 } 435 436 @Override 437 public void header() 438 { 439 write( "begin:header" ); 440 } 441 442 @Override 443 public void header_() 444 { 445 writeln( "end:header" ); 446 } 447 448 @Override 449 public void content() 450 { 451 write( "begin:content" ); 452 } 453 454 @Override 455 public void content_() 456 { 457 writeln( "end:content" ); 458 } 459 460 @Override 461 public void footer() 462 { 463 write( "begin:footer" ); 464 } 465 466 @Override 467 public void footer_() 468 { 469 writeln( "end:footer" ); 470 } 471 472 @Override 473 public void paragraph() 474 { 475 write( "begin:paragraph" ); 476 } 477 478 @Override 479 public void paragraph_() 480 { 481 writeln( "end:paragraph" ); 482 } 483 484 @Override 485 public void data( String value ) 486 { 487 write( "begin:data, value: " + value ); 488 } 489 490 @Override 491 public void data_() 492 { 493 writeln( "end:data" ); 494 } 495 496 @Override 497 public void time( String datetime ) 498 { 499 write( "begin:time, datetime: " + datetime ); 500 } 501 502 @Override 503 public void time_() 504 { 505 writeln( "end:time" ); 506 } 507 508 @Override 509 public void address() 510 { 511 write( "begin:address" ); 512 } 513 514 @Override 515 public void address_() 516 { 517 writeln( "end:address" ); 518 } 519 520 @Override 521 public void blockquote() 522 { 523 write( "begin:blockquote" ); 524 } 525 526 @Override 527 public void blockquote_() 528 { 529 writeln( "end:blockquote" ); 530 } 531 532 @Override 533 public void division() 534 { 535 write( "begin:division" ); 536 } 537 538 @Override 539 public void division_() 540 { 541 writeln( "end:division" ); 542 } 543 544 @Override 545 public void verbatim_() 546 { 547 writeln( "end:verbatim" ); 548 } 549 550 @Override 551 public void definedTerm() 552 { 553 write( "begin:definedTerm" ); 554 } 555 556 @Override 557 public void definedTerm_() 558 { 559 writeln( "end:definedTerm" ); 560 } 561 562 @Override 563 public void figureCaption() 564 { 565 write( "begin:figureCaption" ); 566 } 567 568 @Override 569 public void figureCaption_() 570 { 571 writeln( "end:figureCaption" ); 572 } 573 574 @Override 575 public void tableCell() 576 { 577 write( "begin:tableCell" ); 578 } 579 580 @Override 581 public void tableCell_() 582 { 583 writeln( "end:tableCell" ); 584 } 585 586 @Override 587 public void tableHeaderCell() 588 { 589 write( "begin:tableHeaderCell" ); 590 } 591 592 @Override 593 public void tableHeaderCell_() 594 { 595 writeln( "end:tableHeaderCell" ); 596 } 597 598 @Override 599 public void tableCaption() 600 { 601 write( "begin:tableCaption" ); 602 } 603 604 @Override 605 public void tableCaption_() 606 { 607 writeln( "end:tableCaption" ); 608 } 609 610 @Override 611 public void figureGraphics( String name ) 612 { 613 write( "figureGraphics, name: " + name ); 614 } 615 616 @Override 617 public void horizontalRule() 618 { 619 write( "horizontalRule" ); 620 } 621 622 @Override 623 public void pageBreak() 624 { 625 write( "pageBreak" ); 626 } 627 628 @Override 629 public void anchor( String name ) 630 { 631 write( "begin:anchor, name: " + name ); 632 } 633 634 @Override 635 public void anchor_() 636 { 637 writeln( "end:anchor" ); 638 } 639 640 @Override 641 public void link( String name ) 642 { 643 write( "begin:link, name: " + name ); 644 } 645 646 @Override 647 public void link_() 648 { 649 writeln( "end:link" ); 650 } 651 652 @Override 653 public void inline() 654 { 655 write( "begin:inline" ); 656 } 657 658 @Override 659 public void inline_() 660 { 661 writeln( "end:inline" ); 662 } 663 664 @Override 665 public void italic() 666 { 667 write( "begin:italic" ); 668 } 669 670 @Override 671 public void italic_() 672 { 673 writeln( "end:italic" ); 674 } 675 676 @Override 677 public void bold() 678 { 679 write( "begin:bold" ); 680 } 681 682 @Override 683 public void bold_() 684 { 685 writeln( "end:bold" ); 686 } 687 688 @Override 689 public void monospaced() 690 { 691 write( "begin:monospaced" ); 692 } 693 694 @Override 695 public void monospaced_() 696 { 697 writeln( "end:monospaced" ); 698 } 699 700 @Override 701 public void lineBreak() 702 { 703 write( "lineBreak" ); 704 } 705 706 @Override 707 public void lineBreakOpportunity() 708 { 709 write( "lineBreakOpportunity" ); 710 } 711 712 @Override 713 public void nonBreakingSpace() 714 { 715 write( "nonBreakingSpace" ); 716 } 717 718 @Override 719 public void text( String text ) 720 { 721 write( "text: " + text ); 722 } 723 724 @Override 725 public void rawText( String text ) 726 { 727 write( "rawText: " + text ); 728 } 729 730 @Override 731 public void comment( String comment ) 732 { 733 write( "comment: " + comment ); 734 } 735 736 @Override 737 public void flush() 738 { 739 try 740 { 741 out.flush(); 742 } 743 catch ( IOException e ) 744 { 745 LOGGER.warn( "Could not flush sink", e ); 746 } 747 } 748 749 @Override 750 public void close() 751 { 752 try 753 { 754 out.close(); 755 } 756 catch ( IOException e ) 757 { 758 LOGGER.warn( "Could not close sink", e ); 759 } 760 } 761 762 @Override 763 public void head( SinkEventAttributes attributes ) 764 { 765 head(); 766 } 767 768 @Override 769 public void title( SinkEventAttributes attributes ) 770 { 771 title(); 772 } 773 774 @Override 775 public void author( SinkEventAttributes attributes ) 776 { 777 author(); 778 } 779 780 @Override 781 public void date( SinkEventAttributes attributes ) 782 { 783 date(); 784 } 785 786 @Override 787 public void body( SinkEventAttributes attributes ) 788 { 789 body(); 790 } 791 792 @Override 793 public void article( SinkEventAttributes attributes ) 794 { 795 article(); 796 } 797 798 @Override 799 public void navigation( SinkEventAttributes attributes ) 800 { 801 navigation(); 802 } 803 804 @Override 805 public void sidebar( SinkEventAttributes attributes ) 806 { 807 sidebar(); 808 } 809 810 @Override 811 public void section( int level, SinkEventAttributes attributes ) 812 { 813 write( "begin:section" + level ); 814 } 815 816 @Override 817 public void section_( int level ) 818 { 819 writeln( "end:section" + level ); 820 } 821 822 @Override 823 public void sectionTitle( int level, SinkEventAttributes attributes ) 824 { 825 write( "begin:sectionTitle" + level ); 826 } 827 828 @Override 829 public void sectionTitle_( int level ) 830 { 831 writeln( "end:sectionTitle" + level ); 832 } 833 834 @Override 835 public void header( SinkEventAttributes attributes ) 836 { 837 header(); 838 } 839 840 @Override 841 public void content( SinkEventAttributes attributes ) 842 { 843 content(); 844 } 845 846 @Override 847 public void footer( SinkEventAttributes attributes ) 848 { 849 footer(); 850 } 851 852 @Override 853 public void list( SinkEventAttributes attributes ) 854 { 855 list(); 856 } 857 858 @Override 859 public void listItem( SinkEventAttributes attributes ) 860 { 861 listItem(); 862 } 863 864 @Override 865 public void numberedList( int numbering, SinkEventAttributes attributes ) 866 { 867 numberedList( numbering ); 868 } 869 870 @Override 871 public void numberedListItem( SinkEventAttributes attributes ) 872 { 873 numberedListItem(); 874 } 875 876 @Override 877 public void definitionList( SinkEventAttributes attributes ) 878 { 879 definitionList(); 880 } 881 882 @Override 883 public void definitionListItem( SinkEventAttributes attributes ) 884 { 885 definitionListItem(); 886 } 887 888 @Override 889 public void definition( SinkEventAttributes attributes ) 890 { 891 definition(); 892 } 893 894 @Override 895 public void definedTerm( SinkEventAttributes attributes ) 896 { 897 definedTerm(); 898 } 899 900 @Override 901 public void figure( SinkEventAttributes attributes ) 902 { 903 write( "begin:figure" + SinkUtils.getAttributeString( attributes ) ); 904 } 905 906 @Override 907 public void figureCaption( SinkEventAttributes attributes ) 908 { 909 figureCaption(); 910 } 911 912 @Override 913 public void figureGraphics( String src, SinkEventAttributes attributes ) 914 { 915 figureGraphics( src ); 916 } 917 918 @Override 919 public void table( SinkEventAttributes attributes ) 920 { 921 table(); 922 } 923 924 @Override 925 public void tableRow( SinkEventAttributes attributes ) 926 { 927 tableRow(); 928 } 929 930 @Override 931 public void tableCell( SinkEventAttributes attributes ) 932 { 933 tableCell(); 934 } 935 936 @Override 937 public void tableHeaderCell( SinkEventAttributes attributes ) 938 { 939 tableHeaderCell(); 940 } 941 942 @Override 943 public void tableCaption( SinkEventAttributes attributes ) 944 { 945 tableCaption(); 946 } 947 948 @Override 949 public void paragraph( SinkEventAttributes attributes ) 950 { 951 paragraph(); 952 } 953 954 @Override 955 public void data( String value, SinkEventAttributes attributes ) 956 { 957 data( value ); 958 } 959 960 @Override 961 public void time( String datetime, SinkEventAttributes attributes ) 962 { 963 time( datetime ); 964 } 965 966 @Override 967 public void address( SinkEventAttributes attributes ) 968 { 969 address(); 970 } 971 972 @Override 973 public void blockquote( SinkEventAttributes attributes ) 974 { 975 blockquote(); 976 } 977 978 @Override 979 public void division( SinkEventAttributes attributes ) 980 { 981 division(); 982 } 983 984 @Override 985 public void verbatim( SinkEventAttributes attributes ) 986 { 987 boolean boxed = false; 988 989 if ( attributes != null && attributes.isDefined( SinkEventAttributes.DECORATION ) ) 990 { 991 boxed = "boxed".equals( 992 attributes.getAttribute( SinkEventAttributes.DECORATION ).toString() ); 993 } 994 995 write( "begin:verbatim, boxed: " + boxed ); 996 } 997 998 @Override 999 public void horizontalRule( SinkEventAttributes attributes ) 1000 { 1001 horizontalRule(); 1002 } 1003 1004 @Override 1005 public void anchor( String name, SinkEventAttributes attributes ) 1006 { 1007 anchor( name ); 1008 } 1009 1010 @Override 1011 public void link( String name, SinkEventAttributes attributes ) 1012 { 1013 link( name ); 1014 } 1015 1016 @Override 1017 public void inline( SinkEventAttributes attributes ) 1018 { 1019 inline(); 1020 } 1021 1022 @Override 1023 public void lineBreak( SinkEventAttributes attributes ) 1024 { 1025 lineBreak(); 1026 } 1027 1028 @Override 1029 public void lineBreakOpportunity( SinkEventAttributes attributes ) 1030 { 1031 lineBreakOpportunity(); 1032 } 1033 1034 @Override 1035 public void text( String text, SinkEventAttributes attributes ) 1036 { 1037 text( text ); 1038 } 1039 1040 @Override 1041 public void unknown( String name, Object[] requiredParams, SinkEventAttributes attributes ) 1042 { 1043 write( "unknown: " + name ); 1044 } 1045 1046 /** 1047 * Writes the given string + EOL. 1048 * 1049 * @param text The text to write. 1050 */ 1051 private void write( String text ) 1052 { 1053 try 1054 { 1055 out.write( text + EOL ); 1056 } 1057 catch ( IOException e ) 1058 { 1059 LOGGER.warn( "Could not write to sink", e ); 1060 } 1061 } 1062 1063 /** 1064 * Writes the given string + two EOLs. 1065 * 1066 * @param text The text to write. 1067 */ 1068 private void writeln( String text ) 1069 { 1070 write( text ); 1071 write( EOL ); 1072 } 1073}