/* * Bibliothek - DockingFrames * Library built on Java/Swing, allows the user to "drag and drop" * panels containing any Swing-Component the developer likes to add. * * Copyright (C) 2013 Benjamin Sigg * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Benjamin Sigg * benjamin_sigg@gmx.ch * CH - Switzerland */ package bibliothek.gui.dock.extension.css.doc; /** * This most simple formatter just prints out the entire documentation tree onto the console. * @author Benjamin Sigg */ public class TextFormatter implements DocFormatter{ private StringBuilder builder; @Override public void format( DocRoot root ){ builder = new StringBuilder(); build( root ); System.out.println( builder ); } private void build( DocRoot root ){ for( DocPackage pack : root ){ append( 0, "package: " + pack.getName() ); for( DocClass clazz : pack ){ append( 1, "class: " + clazz.getName() ); for( DocProperty property : clazz ){ append( 2, "property: " + property.getName() ); append( 3, property.getDescription().getText() ); append( 3, "type", property.getType() ); append( 3, "path..." ); DocPath path = property.getPath(); while( path != null ){ append( 4, "[" + path.getDescription().getText() + "]"); for( DocNode node : path.getNodes() ){ build( " -> ", node ); } for( DocNode node : path.getUnordered() ){ build( " -? ", node ); } path = path.getParent(); } } } } } private void build( String prefix, DocNode node ){ append( 4, prefix + node.getDescription().getTextOrEmpty() ); build( " name", node.getName() ); String identifier = node.getIdentifier().getText(); if( identifier != null ){ append( 4, " identifier", identifier ); } for( DocKey key : node.getClasses() ){ build( " class", key ); } for( DocKey key : node.getPseudoClasses() ){ build( " pseudo-class", key ); } for( DocKey key : node.getProperties() ){ build( " property", key ); } } private void build( String key, DocKey value ){ if( value != null ){ append( 4, key + "=" + value.getKey() + ", " + value.getDescription().getTextOrEmpty()); } } private void append( int tabs, String key, Object value ){ append( tabs, key + ": " + String.valueOf( value )); } private void append( int tabs, String line ){ if( line != null ){ indent( tabs ); builder.append( line ); builder.append( "\n" ); } } private void indent( int tabs ){ for( int i = 0; i < tabs; i++ ){ builder.append( " " ); } } }