Add utils module.
* haunt/utils.scm: New file. * Makefile.am (SOURCES): Add it.
This commit is contained in:
		@@ -41,6 +41,7 @@ godir=$(libdir)/guile/2.0/ccache
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
SOURCES =					\
 | 
					SOURCES =					\
 | 
				
			||||||
  haunt/config.scm				\
 | 
					  haunt/config.scm				\
 | 
				
			||||||
 | 
					  haunt/utils.scm				\
 | 
				
			||||||
  haunt/post.scm				\
 | 
					  haunt/post.scm				\
 | 
				
			||||||
  haunt/reader.scm				\
 | 
					  haunt/reader.scm				\
 | 
				
			||||||
  haunt/page.scm				\
 | 
					  haunt/page.scm				\
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										58
									
								
								haunt/utils.scm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								haunt/utils.scm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					;;; Haunt --- Static site generator for GNU Guile
 | 
				
			||||||
 | 
					;;; Copyright © 2015 David Thompson <davet@gnu.org>
 | 
				
			||||||
 | 
					;;;
 | 
				
			||||||
 | 
					;;; This file is part of Haunt.
 | 
				
			||||||
 | 
					;;;
 | 
				
			||||||
 | 
					;;; Haunt is free software; you can redistribute it and/or modify it
 | 
				
			||||||
 | 
					;;; under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					;;; the Free Software Foundation; either version 3 of the License, or
 | 
				
			||||||
 | 
					;;; (at your option) any later version.
 | 
				
			||||||
 | 
					;;;
 | 
				
			||||||
 | 
					;;; Haunt 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
 | 
				
			||||||
 | 
					;;; General Public License for more details.
 | 
				
			||||||
 | 
					;;;
 | 
				
			||||||
 | 
					;;; You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					;;; along with Haunt.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;; Commentary:
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;; Miscellaneous utility procedures.
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;;; Code:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define-module (haunt utils)
 | 
				
			||||||
 | 
					  #:use-module (ice-9 ftw)
 | 
				
			||||||
 | 
					  #:use-module (ice-9 match)
 | 
				
			||||||
 | 
					  #:use-module (srfi srfi-1)
 | 
				
			||||||
 | 
					  #:use-module (srfi srfi-26)
 | 
				
			||||||
 | 
					  #:export (flatten
 | 
				
			||||||
 | 
					            flat-map
 | 
				
			||||||
 | 
					            string-split-at))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define* (flatten lst #:optional depth)
 | 
				
			||||||
 | 
					  "Return a list that recursively concatenates the sub-lists of LST,
 | 
				
			||||||
 | 
					up to DEPTH levels deep.  When DEPTH is #f, the entire tree is
 | 
				
			||||||
 | 
					flattened."
 | 
				
			||||||
 | 
					  (if (and (number? depth) (zero? depth))
 | 
				
			||||||
 | 
					      lst
 | 
				
			||||||
 | 
					      (fold-right (match-lambda*
 | 
				
			||||||
 | 
					                   (((sub-list ...) memo)
 | 
				
			||||||
 | 
					                    (append (flatten sub-list (and depth (1- depth)))
 | 
				
			||||||
 | 
					                            memo))
 | 
				
			||||||
 | 
					                   ((elem memo)
 | 
				
			||||||
 | 
					                    (cons elem memo)))
 | 
				
			||||||
 | 
					                  '()
 | 
				
			||||||
 | 
					                  lst)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define (flat-map proc . lsts)
 | 
				
			||||||
 | 
					  (flatten (apply map proc lsts) 1))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define (string-split-at str char-pred)
 | 
				
			||||||
 | 
					  (let ((i (string-index str char-pred)))
 | 
				
			||||||
 | 
					    (if i
 | 
				
			||||||
 | 
					        (list (string-take str i)
 | 
				
			||||||
 | 
					              (string-drop str (1+ i)))
 | 
				
			||||||
 | 
					        (list str))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Reference in New Issue
	
	Block a user