package de.axone.funky.shell; import de.axone.funky.Argument; import de.axone.funky.ArgumentValidator; import de.axone.funky.FunctionDescription; import de.axone.funky.Manual; import de.axone.tools.S; import de.axone.tools.Text; public class Manual_Shell implements Manual<Caller_Shell>{ private static final int INDENT_DESCRIPTION = 20; @Override public CharSequence explain( FunctionDescription description ) { StringBuilder result = new StringBuilder(); result .append( description.name() ).append( ": " ) .append( description.description() ) .append( S.NL ) .append( Text.line( '=', 79 ) ) .append( S.NL ) ; for( Argument<?,?> arg : description.arguments() ){ result .append( explain( arg, false ) ) .append( S.NL ) ; } return result; } @Override public CharSequence explain( Argument<?, ?> arg, boolean longVersion ) { StringBuilder result = new StringBuilder(); if( arg.optional() ) result.append( '[' ); if( !arg.positional() ) result.append( "--" ); result.append( arg.name() ); if( arg.shortName() != null ){ result.append( "(-" ).append( arg.shortName() ).append( ')' ); } if( arg.optional() ) result.append( ']' ); if( arg.description() != null ){ result.append( Text.line( ' ', INDENT_DESCRIPTION-result.length() ) ); result.append( arg.description() ); } if( arg.validators().size() > 0 ){ result.append( '[' ); for( ArgumentValidator<?> val : arg.validators() ){ result.append( " " ).append( val.description() ); } result.append( " ]" ); } if( longVersion && arg.longDescription() != null ){ result.append( S.nl ) .append( arg.longDescription() ) .append( S.nl ); } return result; } }