mirror of
				https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
				synced 2025-10-31 01:55:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			33 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| export function parseCommand(cmd) {
 | |
|     const extraSpacesStrippedCommand = cmd.replace(/\s{2,}/g, ' ');
 | |
|     const splitCommand = extraSpacesStrippedCommand.split(/\s+(?![^[]*]|[^<]*>)/);
 | |
|     const bregex = /\.*[\][<>]/g;
 | |
|     const firstCommand = splitCommand.shift();
 | |
|     if (!firstCommand)
 | |
|         throw new Error(`No command found in: ${cmd}`);
 | |
|     const parsedCommand = {
 | |
|         cmd: firstCommand.replace(bregex, ''),
 | |
|         demanded: [],
 | |
|         optional: [],
 | |
|     };
 | |
|     splitCommand.forEach((cmd, i) => {
 | |
|         let variadic = false;
 | |
|         cmd = cmd.replace(/\s/g, '');
 | |
|         if (/\.+[\]>]/.test(cmd) && i === splitCommand.length - 1)
 | |
|             variadic = true;
 | |
|         if (/^\[/.test(cmd)) {
 | |
|             parsedCommand.optional.push({
 | |
|                 cmd: cmd.replace(bregex, '').split('|'),
 | |
|                 variadic,
 | |
|             });
 | |
|         }
 | |
|         else {
 | |
|             parsedCommand.demanded.push({
 | |
|                 cmd: cmd.replace(bregex, '').split('|'),
 | |
|                 variadic,
 | |
|             });
 | |
|         }
 | |
|     });
 | |
|     return parsedCommand;
 | |
| }
 | 
