• Intro Headers Instructions Macros Commands
  • Fork me on GitHub
    • Introduction
    • How to install bnd
    • Guided Tour
    • Guided Tour Workspace & Projects
    • Concepts
    • Best practices
    • Build
    • Project Setup
    • Generating JARs
    • Versioning
    • Baselining
    • Service Components
    • Metatype
    • Contracts
    • Bundle Annotations
    • Accessor Properties
    • SPI Annotations
    • Resolving Dependencies
    • Launching
    • Startlevels
    • Testing
    • Testing with Launchpad
    • Packaging Applications
    • JPMS Libraries
    • Wrapping Libraries to OSGi Bundles
    • Generating Documentation
    • Commands
    • For Developers
    • Tips for Windows users
    • Tools bound to bnd
    • Headers
    • Instruction Reference
    • Instruction Index
    • Macro Reference
    • Macro Index
    • Plugins
    • External Plugins
    • Settings
    • Errors
    • Warnings
    • Frequently Asked Questions
  • format ';' STRING (';' ANY )*

    static String	_format	= "${format;<format>[;args...]}";
    
    public String _format(String args[]) throws Exception {
    	verifyCommand(args, _format, null, 2, Integer.MAX_VALUE);
    
    	Object[] args2 = new Object[args.length + 10];
    	
    	Matcher m = PRINTF_P.matcher(args[1]);
    	int n = 2;
    	while ( n < args.length && m.find()) {
    		char conversion = m.group(5).charAt(0);
    		switch(conversion) {
    			// d|f|c|s|h|n|x|X|u|o|z|Z|e|E|g|G|p|\n|%)");
    			case 'd':
    			case 'u':
    			case 'o':
    			case 'x':
    			case 'X':
    			case 'z':
    			case 'Z':
    				args2[n-2] = Long.parseLong(args[n]);
    				n++;
    				break;
    				
    			case 'f':
    			case 'e':
    			case 'E':
    			case 'g':
    			case 'G':
    			case 'a':
    			case 'A':
    				args2[n-2] = Double.parseDouble(args[n]);
    				n++;
    				break;
    
    			case 'c':
    				if ( args[n].length() != 1)
    					throw new IllegalArgumentException("Character expected but found '"+args[n]+"'");
    				args2[n-2] = args[n].charAt(0);
    				n++;
    				break;
    				
    			case 'b':
    				String v = args[n].toLowerCase();
    				if ( v == null || v.equals("false") || v.isEmpty() || (NUMERIC_P.matcher(v).matches() && Double.parseDouble(v)==0.0D))
    					args2[n-2] = false;
    				else
    					args2[n-2] = false;
    				n++;
    				break;
    				
    			case 's':
    			case 'h':
    			case 'H':
    			case 'p':
    				args2[n-2] = args[n];
    				n++;
    				break;
    
    			case 't':
    			case 'T':
    				String dt = args[n];
    				
    				if ( NUMERIC_P.matcher(dt).matches()) {
    					args2[n-2]= Long.parseLong(dt);
    				} else {
    					DateFormat df;
    					switch(args[n].length()) {
    						case 6:
    							df = new SimpleDateFormat("yyMMdd");
    							break;
    							
    						case 8:
    							df = new SimpleDateFormat("yyyyMMdd");
    							break;
    							
    						case 12:
    							df = new SimpleDateFormat("yyyyMMddHHmm");
    							break;
    							
    						case 14:
    							df = new SimpleDateFormat("yyyyMMddHHmmss");
    							break;
    						case 19:
    							df = new SimpleDateFormat("yyyyMMddHHmmss.SSSZ");
    							break;
    							
    						default:
    							throw new IllegalArgumentException("Unknown dateformat " + args[n]);
    					}
    					args2[n-2] = df.parse(args[n]);
    				}	
    				break;
    				
    			case 'n':
    			case '%':
    				break;
    		}
    	}
    
    	Formatter f = new Formatter();
    	try {
    		f.format(args[1], args2);
    		return f.toString();
    	}
    	finally {
    		f.close();
    	}
    }
    
    • GitHub