New Find Utility
This commit is contained in:
		
							parent
							
								
									aac9071f2a
								
							
						
					
					
						commit
						2d2c2e4a4a
					
				|  | @ -0,0 +1,59 @@ | |||
| #!/Users/aghuloum/.opt/bin/ikarus --script | ||||
| 
 | ||||
| (define get-comments | ||||
|   (lambda (file-name) | ||||
|     (define comments '()) | ||||
|     (parameterize ([comment-handler | ||||
|                     (lambda (str) | ||||
|                       (set! comments (cons str comments)))]) | ||||
|       (load file-name (lambda (x) (void)))) | ||||
|     (reverse comments))) | ||||
| 
 | ||||
| (define filter | ||||
|   (lambda (f ls) | ||||
|     (cond | ||||
|       [(null? ls) '()] | ||||
|       [(f (car ls)) (cons (car ls) (filter f (cdr ls)))] | ||||
|       [else (filter f (cdr ls))]))) | ||||
| 
 | ||||
| (define matcher | ||||
|   (lambda (tok) | ||||
|     (let ([n (string-length tok)]) | ||||
|       (lambda (str) | ||||
|         (and (fx>= (string-length str) n) | ||||
|              (string=? (substring str 0 n) tok)))))) | ||||
| 
 | ||||
| (define get-matching | ||||
|   (lambda (token file-name) | ||||
|     (filter (matcher token) (get-comments file-name)))) | ||||
| 
 | ||||
| #|Usage: | ||||
|     find.ss token files ... | ||||
|   Prints all the comments matching Hash-Bar-token that are found  | ||||
|   in the files. | ||||
| |# | ||||
| (define usage | ||||
|   (lambda (me?) | ||||
|     (printf "Usage: ~a token files ...\n" (or me? "find")) | ||||
|     (printf " Prints all multiline comments matching #|token<comment>|# from the files\n") | ||||
|     (exit 0))) | ||||
| 
 | ||||
| (define print-comments | ||||
|   (lambda (file ls) | ||||
|     (unless (null? ls) | ||||
|       (printf "From ~a:\n" file) | ||||
|       (for-each  | ||||
|         (lambda (x) | ||||
|           (display x) | ||||
|           (newline)) | ||||
|         ls)))) | ||||
| 
 | ||||
| (let ([args (command-line-arguments)]) | ||||
|   (when (null? args) (usage #f)) | ||||
|   (let ([me (car args)] [args (cdr args)]) | ||||
|     (when (null? args) (usage me)) | ||||
|     (let ([tok (car args)] [files (cdr args)]) | ||||
|       (for-each | ||||
|         (lambda (file) | ||||
|           (print-comments file (get-matching tok file))) | ||||
|         files)))) | ||||
		Loading…
	
		Reference in New Issue
	
	 Abdulaziz Ghuloum
						Abdulaziz Ghuloum